为什么MD5哈希值对于两个看起来相同的excel文件是不同的

时间:2012-09-20 15:35:17

标签: java selenium md5

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

3 个答案:

答案 0 :(得分:4)

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

这种情况的后果是,当您在按位级别比较具有完整性约束的文件时,散列函数可以完美地工作。

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

由于Excel的驱动程序与selenium使用的驱动程序完全不同,特别是在selenium可能对文件进行压缩和其他更改/优化的情况下,当然 - 哈希将会有所不同。

我的建议:   首先:在diff中拉出文件,找出这两个文件之间的区别。如果两个文件的哈希值不同,那么几乎(但不是很完全)不言而喻,那些文件也是不同的。

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

我建议将两者都导出为CSV并逐行进行比较并比较两者。

答案 1 :(得分:3)

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

可能很难确定文件的哪个部分对MD5检查非常有用。

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

答案 2 :(得分:0)

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

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