MD5 哈希在大文件上是否不一致



我知道 MD5 哈希不再建议用于安全性,但我一直在使用它们作为校验和,以确保文件在下载/传输后没有损坏,我认为这仍然可以。尽管在大于千兆字节的文件上使用此方法后,我发现存储和生成的哈希不匹配。这是在我通过USB记忆棒将其从一台计算机传输到另一台计算机之后。我在网上搜索并发现了一些对大文件的引用,可能会创建不一致的哈希值,但我没有看到任何结论。

我正在使用ComputeHash(Stream inputStream) MD5CryptoServiceProvider在传输前后创建哈希,因此不应该是字节格式在不同语言之间混乱的情况。我还尝试再次从文件中构建哈希,第二次它似乎可以很好地创建匹配的哈希。我只是不走运,实际上在将文件复制到 U 盘上和从 U 盘上复制文件后最终损坏了吗?或者这是MD5的已知问题,我应该完全放弃它?如果是这样,理想情况下在 C# 中也作为标准配置的最佳替代品是什么,SHA1 是下一个最佳选择吗?

不,MD5 没有错。哈希将始终相同。文件中必须有一些差异。您可以使用二进制差异工具,就像在某些十六进制编辑器中找到的工具一样,自己验证某些东西是否不同。

您可以使用其他 MD5 工具(如 md5sum 或 HashTab)来验证计算是否正确。


不再推荐MD5的原因不是它不起作用,或者类似的东西。这是因为冲突的概率(为两个不同的输入生成相同的哈希)足够高,以至于攻击者可以故意生成冲突以绕过安全功能。

这正是 Flame 恶意软件欺骗Microsoft签名所做的。

某些数据的 MD5 哈希将与完全相同数据的第二个 MD5 哈希完全相同,无论该数据的大小如何。对于大文件,MD5 的唯一问题是,在某些情况下,您可能会为两个不同的文件获得相同的哈希。不过,这不太可能。

但是,同样的事情也适用于SHA1和任何其他哈希算法,因为您要将大型数据空间转换为小型哈希空间。

听起来更有可能在

传输过程中发生损坏,无论是在USB总线上还是在闪存设备本身上。

最新更新