2

我知道哈希函数进行计算,最终结果是固定长度的字符串。它们用于验证文件是否相同 - 例如,下载的文件。文件所有者提供了散列,因此在这种情况下,完整性检查是比较两个散列。

那么这是唯一的文件完整性检查还是还有另一件事?

4

3 回答 3

2

任何没有逐字节比较的完整性检查都不可避免地类似于散列。也就是说,在像 MD5 这样的加密散列被普遍使用之前,使用了通常称为“校验和”的更简单的算法。有些是标准化的(尝试查找,例如,CRC32)到某种程度。

这些方法的质量差别很大。例如,CRC32 校验和很容易遗漏任何大小的文件中的损坏或修改,而任何常见的加密函数(例如 MD5 或 SHA*)都是很好的完整性指标。

不过,请注意您使用的内容和目的——MD5 和 SHA-1 不再被认为可以抵御恶意攻击(不过,如果您只是将它们用作“更好的校验和”,它们就很好了)。

于 2010-11-12T12:13:35.700 回答
0

通常就是这样。但是,这不会检查文件来自谁。后者是通过更复杂的数字签名来实现的。

此外,MD5(以及 SHA-1)已被破坏,因此不应在可能发生故意文件修改的情况下使用。应该使用更强的散列函数。

于 2010-11-12T12:08:58.857 回答
0

散列函数用于网络等许多领域的完整性原因。另一方面,完整性的概念很弱,因此大多数时候都被避免了。它们采用任意长度的输入,并生成(通常压缩数据)到固定长度。如何检查哈希函数?就像你说的,接收者产生消息的散列函数,然后检查这两个值。此外,此功能不会验证消息的发送者,这就是“数字签名”存在的原因。当某人在消息上签名时不能否认他执行了特定操作,因此签名也提供“不可否认性”。您必须小心您要使用的功能。MD5 与 SHA-1、SHA-2 相比较弱. 你也可以试试 mcrypt 和 scrypt 是最强的。

于 2012-10-11T11:37:59.180 回答