【发布时间】:2015-01-26 09:42:03
【问题描述】:
从 C# 中的整数列表中,我需要生成唯一值列表。我想在 MD5 或类似文件中,但它们生成的字节太多。
整数大小为 2 个字节。
我想得到一个单向通信,例如
0 -> ARY812Q3
1 -> S6321Q66
2 -> 13TZ79K2
因此,证明哈希,用户无法知道整数或干扰哈希列表后面的序列。
目前,我尝试使用 MD5(我的号码),然后使用前 8 个字符。但是我在 51389 发现了第一次碰撞。我可以使用哪些其他替代方案?
正如我所说,我只需要一种方法。不必能够从散列计算整数。系统使用字典来查找它们。
更新:
回复一些关于使用 GetHashCode() 的建议。 GetHashCode 返回相同的整数。我的目的是向最终用户隐藏整数。在这种情况下,整数是数据库的主键。我不想将这些信息提供给用户,因为他们可以推断出数据库中的记录数或每周记录的增量。
哈希不是唯一的,所以也许我需要使用 TripleDes 之类的加密,但我想使用快速简单的东西。此外,TripleDes 返回的字节也太多。
更新 2: 我在谈论哈希,这是一个错误。实际上,我正在尝试对其进行混淆,并使用哈希算法进行了尝试,这不是一个好主意,因为它们不是唯一的。
【问题讨论】:
-
“还有哪些我可以使用的替代方案?”,
HashCode使用相同的数字??? -
或 int.GetHashCode()?
-
你想解决什么样的问题?
-
您可以使用像 Skip32 这样的 32 位分组密码(简单,但不寻常的加密原语)。或者在 FFX 模式下使用格式保留加密(如 AES)(复杂)。或者接受更长的输出并使用 64 位分组密码。
-
Wat 字符编码?另一种选择:只需创建一个包含 64 Ki 价值的 8 个随机字符串的地图,测试其唯一性。
标签: c# encryption hashmap