可升级的摘要/校验和算法

时间:2012-06-28 15:36:58

标签: algorithm hash checksum

我想创建一个包含大量文件校验和的数据库,我担心校验和冲突(两个不同的文件具有相同的校验和)。

问题1:两个不同文件具有相同MD5总和的概率是多少?

作为一种解决方法,我考虑使用增加的校验和。从一个小的校验和开始,如果发生冲突,计算一个更大的校验和,可以导出到较小的校验和,所以我不必重新计算数据库中已有的所有文件的校验和...我仍然想成为能够搜索较小的校验和。

问题2:哪种校验和/摘要算法可以做到这一点?我需要一个校验和算法,它可以计算一定大小的值和“向后”兼容(较小的大小)。 IE浏览器。 file1有一个2字节校验和0x1234和一个4字节校验和0x12345678,2字节校验和可以从4字节校验和中导出。

2 个答案:

答案 0 :(得分:0)

问题1:取决于您拥有多少个文件。对于每对,它大约是1/2 in 128。如果你有2 ^ 64个文件(我估计你可能没有),它们之间至少发生一次碰撞的概率约为0.5。

这假定产生文件的人没有恶意。存在已知的MD5冲突,以及生成碰撞文件的已知方法。如果有人可以通过让你接触到碰撞而自费赚钱,那么碰撞的概率接近1: - )

问题2:通常你只是使用一个更好的哈希开始(也许是SHA-256),然后你的“小”哈希是大型哈希的前几个字节,或者第一个采用模数大的字节数字,也许是一个素数。但这取决于你想要它。

一个廉价而愉快的选择是“大”哈希是两个或多个“小”哈希连接在一起 - 例如,向前和向后散列文件。当然,一旦小哈希被打破,就不知道该中断是否会导致两个哈希组合的中断。

答案 1 :(得分:0)

谷歌认为“生日悖论”,并且满足于知道这些数字是无法控制的。碰撞的概率增加得相当快,但对于类似SHA或MD的东西,它对前两个概率的原始概率没有太大影响。

BTW,如果这是用于加密目的,则不推荐使用MD5。如果你只是重复数据删除或其他什么,MD5应该没问题。