CRC和校验和有什么区别?

use*_*745 26 networking

CRC和校验和有什么区别?

Pét*_*rök 27

CRC(循环冗余校验)是一种校验和,特别是位置相关的校验和算法(其中包括Fletcher的校验和,Adler-32).正如他们的名字所暗示的那样,它们也会检测位置变化,这使得它们比其他校验和方法更加健壮 - 因此使用得更广泛.

  • CRC 一点也不稳健。它的位置特性确实使它成为一个不错的完整性检查,但如果你能负担得起更高的计算成本,你应该使用像 MD5 这样的加密哈希。如果计算不是问题,我推荐 SHA256。另见[我的回答](/sf/answers/3438052831/)。 (2认同)
  • CRC并非旨在抵抗冲突,而是捕获传输和其他错误(例如读取错误)。 (2认同)

Ign*_*ams 13

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


TLi*_*ebe 11

查看HowStuffWorks,了解它们的不同之处以及它们之间的区别.

从页面:

循环冗余校验(CRC)

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

更多信息在上面的链接中给出,包括如何计算校验和的示例.


Ada*_*atz 5

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

我学会了欣赏循环冗余校验(CRC)算法在我的8位300波特文件传输日中的价值。如果本地文件的CRC与存储在文件中(或服务器上)的CRC匹配,则我进行了有效下载。当我下载带有损坏的匹配CRC的文件时,我还学到了一些有关信鸽原理的知识

 

校验是一个错误检测方案,其通常指的是加密散列函数,但它也包括CRC。这是三种不同的校验和类型:

CRC32这样的循环冗余校验速度很快,但是容易发生冲突。它们对碰撞攻击的鲁棒性不强,这意味着某人可以获取给定的CRC并轻松获得与其匹配的第二个输入。

诸如 MD5(较弱), SHA1(较弱)和 SHA256(较强)之类的加密哈希函数是专门设计用于抵抗冲突攻击的。在速度以外的所有情况下,它们都比CRC更可取。使用您可以通过计算获得的最强大的算法。

诸如 PBKDF2 bcrypt之类的密钥派生功能是为密码设计的。它们是校验和,计算成本很高,因此对于蛮力攻击很健壮。

另请参阅有关CRC vs SHA1的Crypto.SE问题。Wikipedia的哈希功能安全摘要页面讨论了各种加密哈希的碰撞倾向性。