CRC和校验和之间有什么区别?

50

CRC 和校验和有什么区别?

4个回答

47

2
CRC并不是非常健壮的。它的位置特性使其成为一个不错的完整性检查,但如果您能承受更高的计算成本,应该使用像MD5这样的加密哈希。如果计算不是问题,我建议使用SHA256。另请参见我的答案 - Adam Katz
7
CRC并非旨在抵抗冲突,而是用于捕捉传输和其他错误,例如读取错误。 - zaph

17

CRC是一种特定的校验和算法,其他类型的校验和包括XOR、模数以及各种密码哈希。


13

请查看HowStuffWorks,了解它们之间的区别和详细说明。

来自该页面:

循环冗余校验(CRC)

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

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


9

Stack Overflow创始人Jeff Atwood在校验和和哈希博客文章中写道:

在我使用8位、300波特率文件传输时,我学会了欣赏循环冗余校验(CRC)算法的价值。如果本地文件的CRC与文件(或服务器)存储的CRC匹配,则表明下载有效。当我下载一个具有匹配CRC但已损坏的文件时,我也了解了一点关于鸽笼原理的知识!

校验和是一种错误检测方案,通常指加密哈希函数,但也包括CRC。以下是三种不同类型的校验和:

循环冗余校验(CRC)等类似CRC-32的方法速度较快但易发生碰撞。它们不具备抵御碰撞攻击的强韧性;攻击者可以轻松获取给定CRC并创建一个匹配的第二个输入。

密码哈希函数,例如MD5(较弱)、SHA-1(弱)和SHA-256(强),专门设计以抵御碰撞攻击。除了速度外,在任何情况下都应优先选择使用它们而非CRC。尽量使用你在计算上能够承受得起的最强算法。

密钥派生函数,如PBKDF2Argon2生成秘密密钥,尽管它们更为人所知的是用于哈希密码。这利用了KDF 密钥延展来使处理较短的密码变得更加昂贵,从而更能抵御暴力攻击


还可以参考Crypto.SE关于CRC与SHA1的问题。维基百科有一篇哈希函数安全摘要页面,讨论了各种加密哈希的碰撞倾向。


让我们在聊天中继续这个讨论 - Adam Katz
校验和并不一定是加密哈希函数,它们可以像字节值的算术和一样简单。请参见模数和和更一般的校验和。也许您需要在校验和方面进行一些安全研究。 - zaph
@zaph - 我已经对此进行了多次修正,并在收到您的其他反馈后进行了整合。模块化求和确实是一种校验和,而XOR则不是。正如我在聊天中指出的那样,我仍然对您的建设性反馈感兴趣,并想知道如何将您的-1转化为+1。让我们停止争论那些已经在我的答案中得到修复的问题。 - Adam Katz
如果您不同意“校验和”通常指的是加密校验和,特别是在与“CRC”区分时,那么我理解您的观点。我的回答的整个重点是CRC只有特定的用途,并不是一个好的通用完整性校验和。LRC看起来非常有趣,但它并不能作为一个很好的说明与CRC有实质性差异的校验和。 - Adam Katz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接