我需要从 C# 中的整数列表生成唯一值的列表。我以为是 MD5 或类似的,但它们生成了太多字节。
整数大小为 2 个字节。
例如,我想获得单向通信
0 -> ARY812Q3
1 -> S6321Q66
2 -> 13TZ79K2
因此,在证明哈希值时,用户无法知道整数或干扰哈希值列表后面的序列。
现在,我尝试使用 MD5(我的号码),然后使用前 8 个字符。但是我在 51389 处发现了第一次碰撞。我还可以使用哪些其他替代方案?
正如我所说,我只需要一种方法。没有必要能够从哈希值中计算出整数。系统使用字典来查找它们。
UPDATE:
回复一些关于使用 GetHashCode() 的建议。 GetHashCode 返回相同的整数。我的目的是向最终用户隐藏整数。在这种情况下,整数是数据库的主键。我不想将这些信息提供给用户,因为他们可以推断出数据库中的记录数或每周记录的增量。
哈希值不是唯一的,所以也许我需要使用像 TripleDes 这样的加密,但我想使用快速而简单的东西。此外,TripleDes 也返回太多字节。
更新2:
我正在谈论哈希,这是一个错误。事实上,我试图混淆它,我尝试使用哈希算法,这不是一个好主意,因为它们不是唯一的。
2017 年 5 月更新
请随意使用(或修改)我开发的库,可通过 Nuget 安装:
安装包 Kent.Cryptography.Obfuscation
这会将非负 id(例如 127)转换为8 个字符的字符串, e.g. xVrAndNb,然后返回(使用一些可用选项来随机化每次生成的序列)。
用法示例
var obfuscator = new Obfuscator();
string maskedID = obfuscator.Obfuscate(15);
完整文档位于:Github https://github.com/kendtimothy/Cryptography.
旧答案
我很久以前就遇到过这个问题,但我在 StackOverflow 中找不到我想要的东西。所以我做了这个混淆类并在github上分享了它。
Obfuscation.cs - Github https://github.com/kendtimothy/Corazon-Heart/blob/master/Services/CObfuscation.cs
您可以通过以下方式使用它:
Obfuscation obfuscation = new Obfuscation();
string maskedValue = obfuscation.Obfuscate(5);
int? value = obfuscation.DeObfuscate(maskedValue);
也许这对未来的访客有帮助:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)