我可以使用部分MD5哈希进行数据识别吗?

时间:2010-05-06 09:57:25

标签: language-agnostic md5 hash

我为identifying files with unknown origin使用MD5哈希。这里没有攻击者,所以我不在乎MD5已被破坏,人们可能会产生冲突。

我的问题是我需要提供日志记录,以便更容易诊断出不同的问题。如果我将每个哈希记录为十六进制字符串太长,不方便而且看起来很难看,所以我想缩短哈希字符串。

现在我知道仅仅占用GUID is a very bad idea的一小部分 - GUID被设计为唯一的,但其中一部分不是。

MD5也是如此 - 我可以说MD5的前4个字节,并假设由于与原始散列相比减少了字节数,我只能获得更高的冲突概率吗?

3 个答案:

答案 0 :(得分:7)

简短的回答是肯定的,你可以使用前4个字节作为id。但要注意生日悖论:

http://en.wikipedia.org/wiki/Birthday_paradox

当您添加更多文件时,碰撞风险会迅速增加。有了50.000,大约有25%的可能性会发生身份碰撞。

编辑:好的,只需阅读指向其他问题的链接,使用100.000个文件,发生碰撞的几率大约是70%。

答案 1 :(得分:1)

答案 2 :(得分:1)

缩短哈希的另一种方法是将其转换为比像Base64更高效的东西或者其中的一些变体。

即使您决定接受4个字符,取4个字符的base64也会提供比hex更多的位数。