我有两个保存在不同位置的 excel 文件。一个是直接从浏览器下载的,另一个是使用 selenium 驱动下载的。我手动检查了两个文件,两者完全相同。但是为这两个文件生成的 MD5 哈希值会有所不同。如何解决这个问题。
3 回答
MD5 是一个散列函数。人们使用散列函数来验证文件、流或其他资源的完整性。当涉及到散列函数时,当您验证文件的完整性时,您正在验证位级别的文件是否相同。
这样做的后果是,当您在按位级别比较具有完整性约束的文件时,散列函数可以完美地工作。
但是,鉴于 Excel 电子表格的性质。如果在按位级别从文档中添加、删除或移动一位,那么该文件的哈希将完全不同。(并非总是如此,但不要担心。)
由于 Excel 的驱动程序与 selenium 使用的驱动程序完全不同,尤其是考虑到 selenium 可能对文件进行的压缩和其他更改/优化,因此 - 当然 - 哈希将有所不同。
我的建议:首先:将文件拉入diff
并找出这两个文件之间的不同之处。如果两个文件的哈希值不同,那么这些文件也不同,这几乎(但不完全)是不言而喻的。
其次:编写一个驱动程序来比较这些电子表格中的信息以验证文档的完整性(并且您可以获取该信息的哈希值),而不是在逐位级别上验证文件。
我建议将两者都导出为 CSV 并逐行比较两者。
MD5 算法完整地计算文件,包括存储在文件中的元数据(文件名、日期等),因此两个文件的“主要内容”可以相同但某些字节不同。
很难确定文件的哪个部分对 MD5 检查真正感兴趣。
如果您在 Windows 上尝试这种工具,并且只对 Excel 文件感兴趣:http ://www.formulasoft.com/download.html
您确定元数据包含在哈希中吗?对此进行一些研究是明智的。
如果这是真的,您将永远找不到匹配的哈希,因为时间戳匹配的可能性非常低,您还可以将文件名更改一千次,并且哈希将是相同的。此外,当 AV 扫描文件时,它会更改访问的时间戳属性,如果元数据包含在不断被 AV 扫描的机器上的哈希中,那么您的哈希将不断变化。