我使用MD5哈希来识别来源未知的文件。没有攻击者,所以我不在意MD5已经被破解了,可以有意地生成冲突。 我的问题是我需要提供日志记录,以便更轻松地诊断不同的问题。如果我将每个哈希记录为十六进制字符串,那太长、不方便且难看了,因此我想缩短哈希字符串。 现在我知道仅取GUID的一小部分是非常糟糕的想法 - GUID旨在是唯一的,但其中的一部分不是。 对于MD5是否也是如此 - 我可以取MD5的前4个字节,并假设由于与原始哈希相比字节数的减少,只会增加碰撞概率吗?
短答案是可以,你可以使用前4个字节作为ID。但要注意生日悖论:随着文件数量的增加,碰撞的风险迅速增加。当有50,000个文件时,出现id碰撞的几率大约为25%。编辑:好的,刚刚阅读了您其他问题的链接,100,000个文件发生碰撞的概率大约为70%。请参考:http://en.wikipedia.org/wiki/Birthday_paradox。