【问题标题】:Calculating MD5 of a file to guarantee integrity计算文件的 MD5 以保证完整性
【发布时间】:2010-01-03 18:52:58
【问题描述】:

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

【问题讨论】:

  • 你是如何计算哈希的?你到底是根据什么计算的?你是如何计算原始哈希的?您能否在问题中添加更多信息?
  • 可能有助于拥有您正在使用的语言
  • 是压缩文件吗?如果 Web 服务器动态压缩数据,则每次压缩头可能包含不同的时间。
  • 您到底想防范什么?很有可能 MD5 不是您想要使用的,而是像 SHA-256 这样的未损坏哈希。
  • 请记住,根据最近的研究,“MD5 应该被认为是密码损坏且不适合进一步使用”。 en.wikipedia.org/wiki/MD5

标签: md5


【解决方案1】:

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

您如何为文件创建 MD5 哈希?您是否尝试过使用another tool 重现问题?

如果有不同的 MD5 签名,那么您的文件在某种程度上是不同的。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-12-17
              • 1970-01-01
              • 1970-01-01
              • 2017-09-23
              • 1970-01-01
              • 2012-05-18
              • 2015-12-18
              相关资源
              最近更新 更多