是的,实际上,只要不是由攻击者或其他恶意实体制作的文件,相同的加密哈希就意味着文件相同。任何精心设计的密码散列函数发生随机碰撞的几率很小,因此在实践中和在没有主动攻击者的情况下,可以忽略不计。
但是,总的来说,不能,我们不能说两个具有相同哈希值的任意文件绝对意味着它们是相同的。
密码哈希函数的工作方式是采用任意长度的输入,并输出根据输入计算出的固定长度的值。一些哈希函数具有多个输出长度可供选择,但是输出在某种程度上仍是固定长度的值。该值的长度最多为几十个字节。如今,通常使用的具有最大输出值的哈希算法具有512位输出,而512位输出为64字节。
如果哈希函数的输入长于哈希函数的输出,则必须删除某些保真度以使输入适合输出。因此,必须存在多个长度大于输出长度的输入,它们会生成相同的输出。
让我们以当前的主力机SHA-256为例。它输出256位或32个字节的哈希。如果您有两个文件,每个文件的长度正好为32个字节,但不同,则无论文件内容如何,这些文件都应(假定算法无缺陷)散列为不同的值。用数学术语来说,散列是将2 256个输入空间映射到2 256个输出空间的函数,应该可以做到无冲突。但是,如果有两个文件,每个文件的长度为33个字节,则必须存在某种输入组合,两个文件的输入散列值必须相同,因为我们现在将2 264个输入空间映射到2 256个输出空间;在这里,我们可以很容易地看到,每个平均输出应该平均存在2 8个输入。更进一步,对于64字节文件,每个单个输出应该存在2 256个输入!
密码散列函数的设计使得在计算上很难组合提供特定输出的输入,或组合两个提供相同输出的输入。这就是所谓的原根攻击性或碰撞攻击性。找到这些碰撞并非不可能;它只是打算变得非常,非常,非常,非常困难。(碰撞攻击的一种特殊情况是生日攻击。)
有些算法在抵抗攻击者方面比其他算法更好。这些天一般认为MD5完全坏掉了,但是我最后看,它仍然具有相当不错的初像抵抗力。SHA-1同样有效地被破坏;尽管没有理由相信无限期地会发生这种情况,但已经证明了原像攻击,但是需要特定的条件。俗话说,攻击总会变得更好,却永远不会变得更糟。目前仍认为SHA-256 / 384/512对于大多数目的是安全的。但是,如果您只是想看看两个非恶意制作的,有效的文件是相同的,那么这些文件中的任何一个都应该足够了,因为输入空间已经受到足够的限制,您将对随机碰撞最感兴趣。如果您有任何理由认为文件是恶意制作的,则至少需要使用当前被认为是安全的加密哈希函数,这会将下限设置为SHA-256。
第一个原像是找到产生特定输出哈希值的输入;第二个原像是找到一个输入,该输入与另一个指定的输入具有相同的输出;冲突是找到两个产生相同输出的输入,而不考虑输出是什么,有时不考虑输入是什么。
综上所述,重要的是要记住,文件可能具有完全不同的数据表示形式并且仍然显示完全相同的数据。因此,他们可能看起来是一样,即使他们的密码散列不匹配,但是如果哈希匹配,那么他们极有可能出现相同的。
cmp
Unix上的fc
文件比较或Windows上的(文件比较)进行比较。