我试图保证下载后文件的完整性。我将文件的MD5存储在数据库中,并在下载后将该MD5与文件进行比较。但是,当我在下载文件后对文件进行哈希处理时,我总是得到不同的MD5结果。我想知道正在被散列的字节数组是否包含像上次修改的元数据并且正在抛弃散列。如果其他人以前做过这件事,我们将非常感谢您的帮助。
答案 0 :(得分:5)
MD5哈希是根据文件内容计算的,不受文档元数据的影响。如果你从相同的内容开始,这是一个确定性的过程总会产生相同的结果(尽管有很多方法可以伪造MD5签名,因为碰撞)。
如何为文件创建MD5哈希?您是否尝试过使用another tool来重现问题?
如果有不同的MD5签名,那么您的文件 会以某种方式不同。
以前的EOL字符建议或以ASCII模式传输二进制文件很可能是文件可以更改的原因。使用diff tool可以帮助确定文件的不同之处/方式。如果您的文件是二进制格式,请尝试使用binary diff tool。
答案 1 :(得分:2)
一种简单的方法:针对两种不同的下载运行差异(我假设二进制但可能不是)。这应该很快找出问题所在。
答案 2 :(得分:0)
如果我不是完全错误的话,md5哈希只处理实际数据而不是时间戳和其他元数据。也许您正在使用ftp传输文本文件,在这种情况下,ftpclient可能会重写换行符以适合您的系统,然后哈希将是不同的
答案 3 :(得分:0)
如果您使用FTP下载,问题可能是:
二进制下载选项而不是ASCII(反之亦然)。
跨平台转移,例如Windows到Unix,其中处理EOL 不同。
答案 4 :(得分:0)
你可以通过对文件的某个特定部分进行散列来测试你的理论......比如说,中间的50%...如果那是不同的话你知道它不仅仅是一个时间戳或者什么......那就是说,你真的需要给我们更多信息以获得更好的答案...
答案 5 :(得分:0)
确保您实际上是在文件的字节上计算MD5,而不是文件名或其他字符串。