【发布时间】:2010-06-13 15:56:05
【问题描述】:
假设我有任何“长”散列,例如 16 字节的 MD5 或 20 字节的 SHA1。
出于GetHashCode() 的目的,我想将此哈希减少到适合 4 个字节。
首先,我非常清楚我会遇到更多的碰撞。在我的情况下这完全没问题,但我仍然希望尽可能少地发生碰撞。
我的问题有几种解决方案:
- 我可以获取散列的前 4 个字节。
- 我可以获取散列的最后 4 个字节。
- 我可以获取 4 个随机字节的哈希值。
- 我可以生成散列的散列,涉及经典的素数乘法。
还有其他我没有想到的解决方案吗?更重要的是,什么方法会给我最独特的哈希码?我目前认为它们几乎是等价的。
Microsoft 选择程序集的公钥标记是其公钥的 SHA1 哈希的最后 8 个字节,所以我可能会选择这个解决方案,但我想知道原因。
【问题讨论】: