如何"减少"哈希?

Jul*_*ain 3 .net hashcode

假设我有任何"长"哈希,如16字节MD5或20字节SHA1.为了达到GetHashCode()目的,我想减少这个哈希以适应4个字节.

首先,我完全清楚我会发生更多碰撞.在我的情况下,这完全没问题,但我仍然希望减少碰撞的可能性.

我的问题有几种解决方案:

  • 我可以取哈希的4个第一个字节.
  • 我可以取哈希的最后4个字节.
  • 我可以采用4个随机字节的哈希值.
  • 我可以生成散列的散列,涉及经典的素数乘法.

还有其他我没想过的解决方案吗?更重要的是,什么方法会给我最独特的哈希码?我现在假设它们几乎相同.

Microsoft选择组件的公钥令牌是其公钥的SHA1哈希的最后8个字节,所以我可能会选择这个解决方案,但我想知道原因.

Ben*_*igt 8

任何哈希都已经减少了.

设计加密哈希值使得数据的任何部分对哈希的任何部分的影响都不会超过任何其他部分.因此,您选择的哈希位数无关紧要.


Guf*_*ffa 5

除了第三个选项之外的任何选项 - 随机选取字节 - 工作正常.如果你通过随机选择字节,相同的输入每次都会产生不同的哈希码,这违背了哈希码的目的.