我为identifying files with unknown origin使用MD5哈希。这里没有攻击者,所以我不在乎MD5已被破坏,人们可能会产生冲突。
我的问题是我需要提供日志记录,以便更容易诊断出不同的问题。如果我将每个哈希记录为十六进制字符串太长,不方便而且看起来很难看,所以我想缩短哈希字符串。
现在我知道仅仅占用GUID is a very bad idea的一小部分 - GUID被设计为唯一的,但其中一部分不是。
MD5也是如此 - 我可以说MD5的前4个字节,并假设由于与原始散列相比减少了字节数,我只能获得更高的冲突概率吗?
答案 0 :(得分:7)
简短的回答是肯定的,你可以使用前4个字节作为id。但要注意生日悖论:
http://en.wikipedia.org/wiki/Birthday_paradox
当您添加更多文件时,碰撞风险会迅速增加。有了50.000,大约有25%的可能性会发生身份碰撞。
编辑:好的,只需阅读指向其他问题的链接,使用100.000个文件,发生碰撞的几率大约是70%。
答案 1 :(得分:1)
以下是您可能会参考的相关主题
What is the probability that the first 4 bytes of MD5 hash computed from file contents will collide?
答案 2 :(得分:1)
缩短哈希的另一种方法是将其转换为比像Base64更高效的东西或者其中的一些变体。
即使您决定接受4个字符,取4个字符的base64也会提供比hex更多的位数。