CRC 和校验和有什么区别?
循环冗余校验(Cyclic Redundancy Check)是一种校验和,具体来说是一种位置相关的校验算法(还有其他算法,如Fletcher's checksum、Adler-32)。正如它们的名称所示,它们还可以检测位置变化,这使它们比其他校验方法更加稳健,因此被广泛使用。
CRC是一种特定的校验和算法,其他类型的校验和包括XOR、模数以及各种密码哈希。
请查看HowStuffWorks,了解它们之间的区别和详细说明。
来自该页面:
循环冗余校验(CRC)
CRC在概念上类似于校验和,但它们使用多项式除法来确定CRC的值。
链接中提供了更多信息,包括如何计算校验和的示例。
Stack Overflow创始人Jeff Atwood在校验和和哈希博客文章中写道:
在我使用8位、300波特率文件传输时,我学会了欣赏循环冗余校验(CRC)算法的价值。如果本地文件的CRC与文件(或服务器)存储的CRC匹配,则表明下载有效。当我下载一个具有匹配CRC但已损坏的文件时,我也了解了一点关于鸽笼原理的知识!
校验和是一种错误检测方案,通常指加密哈希函数,但也包括CRC。以下是三种不同类型的校验和:
循环冗余校验(CRC)等类似CRC-32的方法速度较快但易发生碰撞。它们不具备抵御碰撞攻击的强韧性;攻击者可以轻松获取给定CRC并创建一个匹配的第二个输入。
密码哈希函数,例如MD5(较弱)、SHA-1(弱)和SHA-256(强),专门设计以抵御碰撞攻击。除了速度外,在任何情况下都应优先选择使用它们而非CRC。尽量使用你在计算上能够承受得起的最强算法。
密钥派生函数,如PBKDF2和Argon2生成秘密密钥,尽管它们更为人所知的是用于哈希密码。这利用了KDF 密钥延展来使处理较短的密码变得更加昂贵,从而更能抵御暴力攻击。
还可以参考Crypto.SE关于CRC与SHA1的问题。维基百科有一篇哈希函数安全摘要页面,讨论了各种加密哈希的碰撞倾向。