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

有帮助吗?

解决方案

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

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

如果有不同的MD5签名,那么您的文件 会以某种方式不同。

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

其他提示

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

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

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

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

  • 跨平台传输,例如Windows to Unix对EOL的处理方式有所不同。

你可以通过对文件的某个特定部分进行散列来测试你的理论......比如,中间的50%......如果那是不同的话你知道它不仅仅是一个时间戳或者什么......那就是说,你真的需要给我们更多信息以获得更好的答案...

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top