CRC校验原理

CRC校验用于检验数据传输过程中数据是否有错误。CRC的错误检测能力依赖于关键多项式的阶次以及所使用的特定关键多项式。误码多项式E(x)是接收到的消息码字与正确消息码字的异或结果。当且仅当误码多项式能够被CRC多项式整除的时候CRC算法无法检查到错误。

我们传输的信息都可以通过二进制来表示,假设我们传输的信息为1010011,该二进制同时可以用多项式来表示,1010011可以表示为 x^6 + x^4 + x^1 + x^0,该多项式表示对应的二进制码一共6位,第0位,第1位,第4位,第6位为1,其他位为0,即1010011。

生成多项式是校验双方共同约定的一个多项式,在传输过程中,该多项式始终不变。生成多项式的最高位和最低位必须是1,。通常有一些标准的生成多项式,例如: CRC-4 x4+x+1 3 ITU G.704 CRC-8 x8+x5+x4+1 31 DS18B20 CRC-12 x12+x11+x3+x2+x+1 80F

假设我们约定的生成多项式为CRC-4 x^4+x+1(这个通常自己选择,选择标准的生成多项式即可),转换成二进制编码就是10011。 假设我们传输的数据是1010011,加密过程就是在我们传输数据后面0,然后除以(模2除法)生成多项式的二进制编码,得到的余数即为校验码,最后将校验码附在传输数据的后面即可,最终的传输数据为1010011xxxx。 传输数据补0的个数为生成多项式的位数减1,如上生成多项式为CRC-4时,二进制编码为10011,补0的个数为4个,计算时使用10100110000,然后除以(模2除法)10011,得到余数为0111,最终我们传输的数据为10100110111。接收方收到10100110111后除以(模2除法)10011,余数为0,即很大概率传输过程中数据是正确的。但如果传输的数据是10100100100,其对10011进行模2除法后,余数也为0,此时是CRC无法校验出错误。CRC校验的精准程度随着选择的多项式的位数越高而越精准,通常意义上,64位比32位更难出现碰撞。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦