CRC循环冗余校验码

网友投稿 1174 2022-09-29

CRC循环冗余校验码

CRC循环冗余校验码

CRC(Cyclic Redundancy Check),循环冗余校验码,可以检测信息是否传输或存储错误,常用于外存储器的数据校验。

这个我有点印象。我读书的时候,还是386、486时代,那时硬盘很小,只有几百兆,更加没有U盘,拷贝东西基本用软盘。软盘分为5英寸和3.5英寸,大一的时候进机房,老师每人发一张5英寸软盘当启动盘,唱片似的,后来基本是3.5英寸的软盘。装机的时候,必然配备一个3.5英寸的软驱。有些土豪还配了2个软驱,一个5寸一个3.5寸,盘符为A盘、B盘。一张软盘好像是1.44兆。我记得装个光荣的《三国英杰传》需要4张软盘。软盘很容易坏,一般用几次就坏了,这个时候就有一些装模作样的工具可以检测一下软盘,在命令行窗口中,往往看到一行行的CRC ERROR的字眼,基本可以断定是死定了。怎么办呢?可以格式化试试运气。

这个CRC错误,就说明存储数据有误,校验通不过,极有可能是软盘损坏了。

CRC的原理,就是一段二进制数据后面附上若干位经过运算生成的校验码。读取数据的时候再用同样的方法进行运算,计算结果与校验码比较,看是否一致(或是类似的方式?)。这种思想,跟电子签名有点相似。电子签名是发送方将正文进行哈希运算,得到摘要,然后将摘要用私钥进行加密,随同正文一起发送给对方。对方收到以后,用发送方的公钥解密,得到原摘要,再将正文用同样方法进行哈希运算得到新摘要,两个摘要比较,相同则说明信息是对方发送的,并且没有被篡改。

CRC的校验码生成有一套规则,主要是

1)将二进制信息左移 k 位,k 是校验码的位数。这个 k 的取值,与参与计算的多项式有关,​​​k = 多项式位数 - 1​​​。例如,有多项式G(X) = X4 + X + 1(4是指数),相应代码为10011(5位),则 ​​k = 5 - 1 = 4​​​。 多项式就相当于密钥,在生成校验码和检错使用校验码时都要用到。

左移就相当于在后面补k个0。例如10110左移4位,即为 101100000。

2)将左移的信息字与多项式进行模2除运算,得到的k位余数即为校验码。

模2除比较难理解,摘抄如下:

可见模2除并不区分数字的大小,只关心位数是否相同,比如上面第一步运算中,101>100,正常除法必然是不够除要退一位的。然后其中的运算不是减法,而是异或:

1 异或 0 = 10 异或 1 = 11 异或 1 = 00 异或 0 = 0

101100000 模2除 10011 = 1111

参考文章:​循环冗余校验码

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:记录一次实践,看看小程序购物车动画怎么优化(小程序加入购物车动画效果)
下一篇:oracle 12c归档模式转非归档模式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~