首页 文章

很好地使用md5来散列文件 - 它能做什么吗?

提问于
浏览
0

为了将文件上传到服务,我根据文件的整个内容计算md5 .

我被要求以不同的方式做:文件的md5,然后还有3个部分:文件开头2%,文件1/3 2%,2/3 2%,和文件末尾的2%,然后将其散列到文件的大小,并在结尾处添加文件大小(以字节为单位) .

显然,这解决了文件之间的哈希冲突 . 对我来说,这似乎是浪费时间,因为你没有增加md5的大小 . 因此,对于大量的文件,从统计上来说,您仍然会遇到相同数量的冲突 .

请帮助我理解这背后的原因 .

编辑:我们然后哈希产生的哈希值 .

2 回答

  • 1

    已经设计了一个好的加密强哈希算法,其目的是使得有意识地找到具有相同哈希值的两个不同数据片段是不可行的,更不用说偶然了 . 因此,只需散列文件即可 . 对文件各部分进行额外散列是没有意义的 .

    这似乎不直观,因为如果散列的长度短于数据的长度,则显然必须存在冲突 . 但是,找到这些冲突是不可行的,因为MD5哈希值是一个不可预测的128位数字,并且可能的128位数字(2 ^ 128)的数量令人难以置信 . 如果你可以以每秒万亿亿亿的速率计算,那么计算所有128位数字仍然需要(2 ^ 128 / 1e24)秒〜大约1000万年 . 对于在没有自定义硬件的情况下以蛮力方式查找哈希冲突所需的时间量,这可能是一个很好的下限 .

    也就是说,这一切都假设散列算法中没有任何弱点可以让你比暴力更好 . MD5 is broken在这方面,所以如果你需要防御试图创建冲突的攻击者,你就不应该使用它 . 最好使用更新的哈希算法,如SHA-2或SHA-3 . (这些也支持更大的输出,如256位 . )

  • 2

    听起来像是一种危险的做法,因为你在没有考虑大量数据的情况下进行重新散列 . 然而,优点是通过运行其他哈希,您可以使用由“更多位”组成的哈希签名进行清理 - (即,您将获得三个MD5哈希值) .

    如果你想这样做 - 并且实际上可以使用更多(更大)的哈希数据来存储/比较 - 你会更好地建议简单地运行一个更安全的不同哈希函数(除了MD5)和/或使用更多位 .

    MD5是一种“较旧”的算法,并且已知具有加密弱点 . 我推荐一种“SHA”算法 - 比如SHA-256或SHA-512 . 优点是它是一个更强大的算法,您只需拥有数据ONCE,并且您获得的位数比MD5多,但是由于您运行一次,它会更快 .

    请注意,哈希冲突的可能性始终存在 . 甚至使用散列进行检测的“高端”存储产品也会比较缓冲区以验证完全匹配,即使两个散列的比较匹配也是如此 .

相关问题