最近做下载工具的时候用到了CRC校验,自己实践了一下,下面做个心得总结。
CRC初体验
首先介绍一个CRC在线校验工具,可以看到其中有几个选项需要配置。
首先是校验码的长度order,然后是生成多项式polynom,其次是初始值initial value,最后是异或(Xor)值。此外还有两个选项,一个是“reverse data bytes”反转数据,另一个是“reverse CRC result result before Final XOR”在最后进行异或运算之前先反转CRC的结果值。
默认情况下(CRC32),会逆转(reverse)待校验数据的字节顺序,输入“123456789”
,得到的校验码为:0xCBF43926
。
取消 reverse data bytes
和 reverse CRC result before Final XOR
后,重新计算校验码,可以看到CRC校验结果从之前的0xCBF43926变为了0xFC891918。
不同的校验长度代表不同校验方式,常用的crc32、crc16等。另外相同的校验长度下,不同的选项所代表的方法也不同。
关于CRC的参数说明,可以参考CRC的参数模型
CRC的原理
相信通过上面对CRC校验工具的使用,大家应该对CRC有一个比较直观的认识。接下来可以快速浏览一下CRC的原理(校验码的计算过程)。
CRC校验是将被处理报文的比特序列当作一个二进制多项式A(x)的系数,该系数除以发送方和接收方预先约定好的生成多项式g(x)后,将求得的余数P(x)作为CRC校验码附加到原始的报文上&