4

我试图保证下载后文件的完整性。我将文件的 MD5 存储在数据库中,并在下载后将该 MD5 与文件进行比较。但是,当我在下载文件后对文件进行哈希处理时,我总是得到不同的 MD5 结果。我想知道正在散列的字节数组是否包含上次修改的元数据并且正在丢弃散列。如果其他人以前这样做过,您的帮助将不胜感激。

4

6 回答 6

5

MD5 哈希是根据文件内容计算的,不受文档元数据的影响。这是一个确定性的过程,如果您从相同的内容开始,总是会产生相同的结果(尽管有一些方法可以因碰撞而伪造 MD5 签名)。

您如何为文件创建 MD5 哈希?您是否尝试过使用其他工具来重现问题?

如果有不同的 MD5 签名,那么您的文件有所不同。

之前关于 EOL 字符的建议,或以 ASCII 模式传输二进制文件很可能是文件可能被更改的原因。使用差异工具可以帮助确定文件的不同之处/方式。如果您的文件是二进制格式,请尝试使用二进制差异工具

于 2008-11-14T01:47:41.977 回答
2

一种简单的查找方法:针对两个不同的下载运行差异(我假设是二进制但可能不是)。这应该可以快速查明问题。

于 2008-11-14T01:21:49.893 回答
0

如果我在这里没有完全错,那么 md5 哈希仅适用于实际数据,而不是时间戳和其他元数据。也许您正在使用 ftp 传输文本文件,在这种情况下,ftpclient 可能会重写换行符以适合您的系统,然后散列将不同

于 2008-11-13T21:51:52.250 回答
0

如果您使用 FTP 下载,问题可能是:

  • 二进制下载选项而不是 ASCII(反之亦然)。

  • 跨平台传输,例如 Windows 到 Unix,其中 EOL 的处理方式不同。

于 2008-11-13T21:53:31.890 回答
0

您可以仅通过对文件的特定部分进行散列来测试您的理论...比如说,中间的 50%...如果这不同,那么您知道它不仅仅是时间戳或其他东西...也就是说,您确实需要给我们更多信息以获得更好的答案...

于 2008-11-13T21:57:04.720 回答
0

确保您实际上是根据文件的字节计算 MD5,而不是文件名或其他字符串。

于 2008-11-19T23:59:29.477 回答