CRC和校验和有啥区别?

Posted

技术标签:

【中文标题】CRC和校验和有啥区别?【英文标题】:What the difference between CRC and checksum?CRC和校验和有什么区别? 【发布时间】:2011-03-22 09:16:18 【问题描述】:

CRC和校验和有什么区别?

【问题讨论】:

【参考方案1】:

CRC (Cyclic Redundancy Check) 是checksum 的一种类型,具体来说是一种位置相关 校验和算法(其中包括Fletcher's checksum、Adler-32)。正如它们的名字所暗示的那样,这些方法也可以检测位置变化,这使得它们比其他校验和方法更强大,因此使用更广泛。

【讨论】:

CRC 一点也不健壮。它的位置特性确实使它成为一个不错的完整性检查,但如果你能负担得起它更高的计算成本,你应该使用像 MD5 这样的加密哈希。如果计算不是问题,我推荐 SHA256。另见my answer。 CRC 的设计目的不是为了抵抗冲突,而是为了捕获传输和其他错误,例如读取错误。【参考方案2】:

CRC 是指一种特定的校验和算法。其他类型的校验和是 XOR、模数和所有各种加密哈希。

【讨论】:

【参考方案3】:

查看HowStuffWorks 了解两者以及它们之间的区别。

从页面:

循环冗余校验 (CRC)

CRC 在概念上类似于校验和,但它们使用多项式除法来确定 CRC 的值

以上链接提供了更多信息,包括如何计算校验和的示例。

【讨论】:

【参考方案4】:

Jeff Atwood(Stack Overflow 的创始人)在他的 Checksums and Hashes 博客文章中写道:

在我的 8 位 300 波特文件传输天数中,我学会了欣赏循环冗余校验 (CRC) 算法的价值。如果本地文件的 CRC 与存储在文件(或服务器上)中的 CRC 匹配,则我有一个有效的下载。当我下载一个匹配的 CRC 已损坏的文件时,我还了解了一些关于 pigeonhole principle 的知识!

 

checksum 是 error-detection scheme,通常指的是加密哈希函数,尽管它也包括 CRC。以下是三种不同类型的校验和:

Cyclic Redundancy Checks 和CRC32 一样,速度快但容易发生冲突。它们对collision attacks 并不健壮,这意味着有人可以获取给定的 CRC 并轻松获得与之匹配的第二个输入。

Cryptographic hash functions 如MD5(较弱)、SHA1(较弱)和SHA256(强)专门设计用于抵抗碰撞攻击。在除速度之外的所有情况下,它们都优于 CRC;使用计算能力最强的算法。

Key derivation functions 像 PBKDF2 和 bcrypt 是为密码设计的。它们是计算成本高昂的校验和,因此它们对brute-force attacks 具有鲁棒性。

另见Crypto.SE question on CRC vs SHA1。***有一个hash function security summary 页面,讨论了各种加密哈希的冲突倾向。

【讨论】:

让我们continue this discussion in chat。 校验和不一定是加密哈希函数,它们可以像字节值的算术和一样简单。请参阅Modular Sum 和更一般的Checksum。也许您需要领导一些安全研究 WRT 校验和。 @zaph – 我已经对它进行了多次修正,并且在收到您的其他反馈时也纳入了它。Modular Sum 确实是一个校验和。异或不是。正如我在聊天中指出的那样,我仍然对您的建设性反馈感兴趣,并想知道如何将您的 -1 变成 +1。让我们停止辩论我的答案中已经修复的项目。 如果您不同意“校验和”通常指的是加密校验和,尤其是在将其与“CRC”区分开来时,那么我理解您的观点。我的回答的重点是 CRC 仅具有特定用途,并不是一个好的通用完整性校验和。 LRC 看起来很有趣,但它不能很好地说明与 CRC 大不相同的校验和。

以上是关于CRC和校验和有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

crc校验大小写有区别吗

CRC校验的原理是啥?

Validator校验器(解决多个异步检验)

使用标记/空间奇偶校验和无奇偶校验有啥区别?

crc校验码计算方法是啥?

问一下计算机大神。crc16与crc32有啥区别