当前位置:首页 >资讯 >什么是CRC32加密算法?


CRC全称为CyclicRedundancyCheck,又称循环冗余验证。CRC它是目前使用中最古老的验证算法之一,它是由目前使用中最古老的验证算法制成的。W.WesleyPeterson根据1961年发表的论文,CRC是一种散列函数,根据网络数据封包或计算机档案等数据产生简短的固定位数校验码(HASH,通过散列算法将任何长度的输入转换为固定长度的摘要输出,结果是散列值,根据散列算法,HASH算法,HASH具有单向性、不可逆性),主要用于检测或验证数据传输或保存后可能出现的错误。生成的数字在传输或存储前计算并附加到数据后面,然后接收方检查确定数据是否发生变化。一般来说,循环冗余验证值为32位整数。由于该函数易于使用二进制计算机硬件.易于进行数学分析,特别擅长检测传输通道干扰引起的错误,因此得到了广泛的应用。

浅析CRC32加密算法

一.基本原理

CRC实际上,检验原理是在p位二进制数据序列之后附加一个r位二进制检验码(序列),从而形成总长为n=p+r位的二进制序列;附加在数据序列之后的检验码与数据序列的内容之间存在一定的关系。如果数据序列中的某个或某个位置因干扰等原因而出现错误,则会破坏这种特定关系。因此,通过检查这种关系,我们可以检查数据的正确性。

二.几个基本概念

1.帧检验序列FCS(FrameCheckSequence):添加冗余码进行错误检查。

2.多项模2运行:实际上是按位异或(ExclusiveOR)操作,即相同为0,相异为1,即不考虑进位.借位二进制加减操作。如:1001101111+11001010=01010001。

3.生成多项式(generatorpolynomial):当进行CRC检查时,发送方和接收方需提前约定除数,即生成多项式,一般记录为G(x)。生成多项式的最高位和最低位必须为1。常用的。CRC代码的生成有:

CRC8=X8+X5+X4+1

CRC-CCITT=X16+X12+X5+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

每个生成多项式都可以对应一个代码,例如CRC8对应代码:100110001。

三.CRC检验码的计算

设置信息字段为K位,验证字段为R位,码字长度为N(N=K+R)。双方事先约定一个R次多项式g(x),则CRC码:

V(x)=A(x)g(x)=xRm(x)+r(x)

其中:m(x)K次信息多项式,r(x)为R-多项式一次校验。

这里r(x)相应的代码为冗余码,加入原始信息字段后形成CRC码。

r(x)计算方法为:在K位信息字段后面添加R个0,再除以g(x)对应的代码序列,得到的余数为r(x)相应的代码(应为R-1位;若不足,则在高位补0)。

四.错误检测

接收方收到数据时,使用收到的数据P(事先约定)模2除法。如果剩余数为0,则认为数据传输无错误;如果剩余数不为0,则认为数据传输有错误。由于我们不知道错误发生在哪里,我们不能自动纠正它们。一般的做法是丢弃接收到的数据。

五.几点说明

1.CRC它是一种常用的检错码,不能用于自动纠错。

2.只要经过严格的选择,并使用足够位数的除数P,所以检测不到错误的概率很小。

3.只使用循环冗余检验CRC错误检测技术只能实现无错误接受(只是非常相似的认为没有错误),不能保证可靠传输。

CRC32具有以下特点:

1.静态的CRC32表或动态生成CRC32表,表的元素数为256,元素大小为4字节

2.在计算CRC32时,将进行查表操作,然后异常或上次CRC32结果右移8位

3.最终生成8字节CRC32值