CRC32对文件完整性检查真的如此糟糕吗?

时间:2012-04-29 11:46:33

标签: file crc32 integrity

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

对,我知道如何检查被传输文件的一致性,CRC32是最快的选择。

我还没有找到完整性检查的CRC32有多糟糕(也许换句话说,CRC32可能无法检测到格式错误的文件)?

2 个答案:

答案 0 :(得分:10)

引自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足以进行错误检测。它被广泛使用。但是,当您想将其用作“哈希函数”时,它是不安全的。

答案 1 :(得分:1)

使用CRC-32可以轻松地发生冲突(相同的哈希输出但不同的数据),因为与其他算法相比,CRC-32仅使用32位。 MD5为128位,SHA-1为160位,SHA-2(SHA256 / 512系列)为224bits-512bits。 (取决于你使用的是什么)。此外,对于SHA-2系列,未发现任何碰撞。

有关可能导致数据发生碰撞的数学和概率的更多信息。请查看Hash CollisionBirthday paradox problem