首页 文章

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

提问于
浏览
0

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

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

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

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

2 回答

  • 0

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

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

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

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

  • 0

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

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

相关问题