当然,MD5 比 CRC32 好,SHA1 比 MD5 好等等......但它们也比 CRC32 慢得多。
没错,我正在考虑如何检查被传输文件的一致性,而 CRC32 是最快的选项。
我在任何地方都没有发现CRC32 的完整性检查有多糟糕(也许换句话说,CRC32 可能不会检测到格式错误的文件)?
引自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 对于错误检测来说绰绰有余。它正在被广泛使用。但是,当您想将其用作“哈希函数”时,它并不安全。