计算文件的MD5以保证完整性

4

我希望在下载后保证文件的完整性。我将文件的MD5哈希值存储在数据库中,并将该哈希值与下载后的文件进行比较。但是,每次在下载后对文件进行哈希运算时,我总是得到不同的MD5结果。我猜想被哈希处理的字节数组可能包含了一些元数据,例如上次修改时间,这可能会影响哈希值。如果有人做过类似的操作,请给些建议,谢谢。


2
你如何计算哈希值?你确切地计算了什么?你是如何计算原始哈希值的?您能为问题添加更多信息吗? - Jason Coco
可能需要说明你正在使用的编程语言。 - Andrew Cox
这是一个压缩文件吗?如果Web服务器动态压缩数据,则压缩头可能每次都包含不同的时间。 - yogman
你到底要防范什么?很可能MD5并不是你想要使用的,而是像SHA-256这样不易被攻破的散列函数。 - Bruno Rohée
2
请注意,根据最近的研究,“MD5应被视为密码学上已被破解且不适合进一步使用”。http://en.wikipedia.org/wiki/MD5 - Zakharia Stanley
6个回答

5

MD5哈希是在文件内容上计算的,不受文档元数据的影响。这是一个确定性过程,如果您使用相同的内容开始(尽管有方法可以由于冲突而伪造MD5签名),它将始终产生相同的结果。

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

如果存在不同的MD5签名,则您的文件会以某种方式不同

之前提到的行尾字符或在ASCII模式下传输二进制文件的建议很可能是文件被更改的原因。使用比较工具可以帮助识别文件的差异在哪里/如何不同。如果您的文件是二进制格式,请尝试使用二进制比较工具


2

一种简单的方法是运行两个不同下载版本之间的差异(我假设是二进制文件,但也许不是),这应该能够快速定位问题。


0

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


0

如果我没记错的话,MD5哈希只适用于实际数据而不是时间戳和其他元数据。也许你正在使用FTP传输文本文件,在这种情况下,FTP客户端可能会重写换行符以适应你的系统,然后哈希值就会不同。


0

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

  • 选择了二进制下载选项而非ASCII(或反之亦然)。

  • 在不同平台之间传输,例如从Windows到Unix,其中行尾处理方式不同。


0
你可以通过只对文件的特定部分进行哈希测试来验证你的理论...比如,中间的50%...如果不同,那么你就知道它不仅仅是时间戳或其他东西...话虽如此,你真的需要提供更多信息才能得到更好的答案...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接