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位更难出现碰撞。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 奇偶校验、海明码、CRC循环冗余校验码 三种校验码比较重要,需要牢记,在计算机网络中用处较大 奇偶校验 根据被传输...
    正经龙阅读 13,175评论 0 1
  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 8,872评论 0 6
  • 电力系统是一个综合化的系统,作为一个熟练的电工,对于通信有着一定的认识。否则很多问题,我们将无从下手。首先我们从广...
    洪城小电工阅读 119,680评论 8 34
  • 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC 算法对各种数...
    Otis4631阅读 5,738评论 0 3
  • 梁启超担任《时务报》主编期间,曾做《变法通议》一文,其中《论师范》《论文学》《论幼教》三章对儿童早期教育有深刻认识...
    沁润仁心阅读 3,321评论 1 2

友情链接更多精彩内容