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 = 1
0 异或 1 = 1
1 异或 1 = 0
0 异或 0 = 0

101100000 模2除 10011 = 1111

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值