【问题标题】:Why MD5 hash values are different for two excel files which appear the same为什么两个看起来相同的excel文件的MD5哈希值不同
【发布时间】:2012-09-20 15:35:16
【问题描述】:

我有两个 Excel 文件保存在不同的位置。一个是直接从浏览器下载的,另一个是使用 selenium 驱动下载的。我手动检查了两个文件,两者完全相同。但是为这两个文件生成的 MD5 哈希值会有所不同。如何解决此问题。

【问题讨论】:

  • MD5 不会从 Selenium 的库中出来。就像上面的海报说的那样,得到一个图书馆并使用它。与 Selenium 无关。
  • 如果您的问题有可接受的答案,您应该回到这里并标记并回答 :-)

标签: java selenium md5


【解决方案1】:

MD5 是一个散列函数。人们使用散列函数来验证文件、流或其他资源的完整性。对于散列函数,当您验证文件的完整性时,您正在验证位级别的文件是否相同。

这样做的后果是,当您在按位级别比较具有完整性约束的文件时,散列函数可以完美运行。

但是,鉴于 Excel 电子表格的性质。如果在按位级别上从文档中添加、删除或移动一位,那么该文件的哈希将完全不同。 (并非总是如此,但不要担心。)

由于 Excel 的驱动程序与 selenium 使用的驱动程序完全不同,尤其是考虑到 selenium 可能对文件进行的压缩和其他更改/优化,那么 - 当然 - 哈希将有所不同.

我的建议: 首先:拉取diff中的文件,看看这两个文件有什么不同。如果两个文件的哈希值不同,那么这些文件也不同,这几乎(但不完全)是不言而喻的。

其次:编写一个驱动程序来比较这些电子表格中的信息,以验证文档的完整性(并且您可以获取该信息的哈希值),而不是逐位验证文件。

我建议将两者都导出为 CSV,然后逐行比较两者。

【讨论】:

    【解决方案2】:

    MD5 算法对文件进行完整计算,包括存储在文件中的元数据(文件名、日期等),因此两个文件的“主要内容”可以相同但某些字节不同。

    很难确定文件的哪个部分对 MD5 检查真正感兴趣。

    如果您使用的是 Windows,并且只对 Excel 文件感兴趣,请尝试使用此类工具:http://www.formulasoft.com/download.html

    【讨论】:

    • 谢谢@Neozaru。但我想用硒测试它
    • 我和你@RamCh 有同样的经历。我猜 excel 文件中某处的时间戳会破坏 MD5 检查。
    • 典型的 md5checksum 只比较文件的内容,不包括文件名和日期等元数据,stackoverflow.com/questions/5055143/…
    【解决方案3】:

    您确定元数据包含在哈希中吗?对此进行一些研究是明智的。

    如果这是真的,您将永远找不到匹配的哈希,因为时间戳匹配的可能性非常低,您还可以将文件名更改一千次,哈希将是相同的。此外,当 AV 扫描文件时,它会更改访问的时间戳属性,如果元数据包含在不断被 AV 扫描的机器上的哈希中,那么您的哈希将不断变化。

    【讨论】:

    • 这并没有提供问题的答案,它更多的是评论,因为你不能发表评论,但你必须首先通过回答你知道答案的问题来获得特权 100% 肯定
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多