md5哈希的前32位是否与任何其他子串一样"随机"?

Kip*_*Kip 12 language-agnostic hash md5

我想要创建一些数据对象的32位哈希.由于我不想编写自己的哈希函数并且md5可用,我目前的方法是使用md5哈希中的前32位(即前8个十六进制数字).这可以接受吗?

换句话说,md5哈希的前32位是否与任何其他子串一样"随机"? 或者有什么理由我更喜欢,比方说,最后的32位?或者可能将四个32位子串一起异或?

一些先发制人的澄清:

  • 这些哈希值不需要加密安全.
  • 我并不关心md5的性能 - 它足以满足我的需求.
  • 这些哈希只需要"随机"足以使碰撞很少见.
  • 在这个系统中,物品的数量不应超过10,000(实际上它可能不会达到一半那么高).因此,在最坏的情况下,遇到任何碰撞的概率应该是大约1%(假设找到了足够"随机"的散列).

Joe*_*oey 11

对于任何良好的散列函数,各个位应该近似随机.因此,您应该安全地仅使用MD5哈希的前32位.

或者你也可以使用CRC32,计算速度要快得多(代码大约是20行).

  • Kip:性能与否,CRC32为您提供32位哈希,这正是您想要的. (3认同)

Jas*_*n S 9

换句话说,md5哈希的前32位是否与任何其他子串一样"随机"?

是.如果答案是否定的,MD5将不够安全.(当然,它有一些较小的加密缺点,但我不知道任何统计的缺点)

  • 该声明仅在添加资格时才适用.使所有碰撞攻击不可行是不够安全的.它(到目前为止)足够安全,使得原像攻击不可行.见http://www.vpnc.org/hash.html (4认同)