悟空:师傅,最近我被CRC搞的头晕脑涨? ~~~:那是何方神圣? 悟空:CRC通用数据传送的校验编码。 ~~~:555, 悟空:???? ~~~:加快追赶青春的脚步,飞速与世界接吻咯。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 几天后,
悟空:师傅你怎满脸青一块紫一块? ~~~:FANS太多,还真让人伤脑筋啊~~~~~~~~~~~ 悟空:知道自己是近视眼,就别盯着别人的MM,被暴打了把。 ~~~:多年不出山,没想到还怎么受欢迎! 悟空:观音姐姐,救救我~~~~~~ ……—¥%……¥……¥%##¥%#%¥#%#%%%¥ 悟空:让你没事就长篇大论,我T~~~~ ~~~: 我招了
======================================================================
CRC远没有网上所说那么简单。 首先我们有一个数据流,也就是你需要校验的数据,可以是N BIT,一般我们常用的4,8,16,32,128 BIT,这里我取几个8的倍数,是因为我们的硬件以二进制为基础,所以在存取数据比较容易,无须充填位数来满足寄存器的要求。你用13,17,29 BIT也可以。
有一点你要记住的是,你选用几个BIT,那么在CRC编码就需要移位几次,8就是移位8次,13就是移位13次,128就是移位128次。
我们看看目前为止的CRC的标准或者行规有: CRC8 = X8+X5+X4+1 CRC16 = X16+X15+X5+1 CRC12 = X12+X11+X3+X2+1 CRC32 = X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1 CRC-CCITT=X16+X12+X5+1
需要说明的:CRC后所带的数字就是CRC的位数,它与你的数据流是无关的。
CRC8,8位CRC校验。 CRC16,16位CRC校验。 CRC12,12位CRC校验。 CRC32,32位CRC校验。 CRC-CCITT,16位CRC校验。
我们看到5个多项式,它的意义其实就是给出一个与数据流进行异或运算的初始值, 当然你可以更改这个值。比如:
CRC8 = X8+X5+X4+1 》》》 CRC8 = X7+X3+X2+1
CRC16 = X16+X15+X5+1 》》》CRC16 = X15+X5+1
只要你做出的东西是相互连接,不用与其他的机器对接,推荐保密部门使用该方法。 如果修改上述的多项式,那么别人在分析你传送来的数据时,该全部是错码。
补一下课: 异或操作: RESULT 0 0 0 0 1 1 1 0 1 1 1 0
|