9

当然,MD5 比 CRC32 好,SHA1 比 MD5 好等等......但它们也比 CRC32 慢得多。

没错,我正在考虑如何检查被传输文件的一致性,而 CRC32 是最快的选项。

我在任何地方都没有发现CRC32 的完整性检查有多糟糕(也许换句话说,CRC32 可能不会检测到格式错误的文件)?

4

2 回答 2

12

引自http://www.mathpages.com/home/kmath458.htm

因此,如果我们假设数据的任何损坏以完全随机的方式影响我们的字符串,即损坏的字符串与原始字符串完全不相关,那么未检测到损坏的字符串的概率为 1/(2^ n) . 这就是人们说 16 位 CRC 未能检测到数据错误的概率为 1/(2^16) = 1.5E-5,而32 位 CRC 的概率为 1 /(2^32),约为 2.3E-10(小于十亿分之一)

我的观点:CRC-32 对于错误检测来说绰绰有余。它正在被广泛使用。但是,当您想将其用作“哈希函数”时,它并不安全。

于 2012-04-29T11:54:42.377 回答
1

使用 CRC-32 很容易发生冲突(相同的哈希输出但不同的数据),因为与其他算法相比,CRC-32 仅使用 32 位。MD5是128位,SHA-1是160位,SHA-2(SHA256/512系列)是224位-512位。(取决于你使用什么)。此外,对于 SHA-2 系列,没有发现冲突。

有关可能导致数据冲突的数学和概率的更多信息。请寻找哈希碰撞生日悖论问题

于 2012-04-29T11:54:14.900 回答