快速CRC逆序校验方法
CRC校验算法详解及代码实现

CRC校验算法详解及代码实现CRC校验算法的原理是利用生成多项式来计算数据的校验值。
在发送端,将数据和生成多项式进行计算得到一个校验值,然后将这个校验值附加到发送的数据后面一起传输。
在接收端,接收到数据后再次进行计算,并与接收到的校验值进行比较,如果相同则说明数据传输过程中没有错误,否则说明数据传输过程中出现错误。
下面是CRC校验算法的具体步骤:1.选择一个生成多项式,通常用一个二进制数表示。
生成多项式的位数称为CRC位数,常见的有CRC-8,CRC-16,CRC-32等。
2.将生成多项式的最高位与数据的最高位对齐,然后进行异或运算。
异或运算的结果作为下一次异或运算的输入,直到将所有数据都计算完毕。
3.将计算得到的结果作为校验值附加到数据后面一起传输。
下面是一个简单的CRC校验算法的代码实现:```pythondef crc(data, generator):crc_value = 0generator_length = len(generator)for bit in data:crc_value ^= bitif crc_value & 0x1:crc_value = (crc_value >> 1) ^ int(generator, 2)else:crc_value = crc_value >> 1return crc_value#测试数据data = [1, 0, 1, 1]generator = "1011"#进行CRC校验residue = crc(data, generator)print(residue)```在上面的代码中,`data`表示要进行校验的数据,以列表的形式表示,每个元素是一个二进制位。
`generator`表示生成多项式,以字符串的形式表示,每个字符是一个二进制位。
程序输出的结果为校验值。
总结:本文详细介绍了CRC校验算法的原理和步骤,并给出了一个简单的代码实现。
快速CRC逆序校验方法

快速CRC逆序校验方法作者:梁海华盘丽娜来源:《计算机应用》2013年第07期文章编号:10019081(2013)07183303doi:10.11772/j.issn.10019081.2013.07.1833摘要:循环冗余校验(CRC)是计算机网络中常用的冗余校验方法。
针对现有的正序(FIFO)校验方法只能对编码寄存器为零初始状态时生成的校验值正确校验的问题,提出一种逆序(LIFO)校验方法。
首先,使用状态矩阵对两类串行编码电路进行分析,理论上证明状态矩阵可逆,由逆矩阵变换得出串行逆序校验方法及其电路;通过电路分析,可将串行逆序方法扩展为快速并行逆序方法,无须预补零操作,简化了计算流程。
通过实例计算,验证了并行逆序方法能够对任意初始状态生成的校验值正确校验;仿真结果表明该方法具有与并行正序校验方法近似的运算速度。
关键词:循环冗余校验;先进先出;初始状态;后进先出;运算速度中图法分类号:TP393文献标志码:A英文标题Method of fast cyclic redundancy check reverse decoding英文作者名LIANG Haihua*, PAN Lina英文地址(School of Computer Science and Engineering, Changshu Institute of Technology, Changshu Jiangsu 215500, China英文摘要)Abstract:Cyclic Redundancy Check (CRC) has already been used in the field of computer network widely. Since the existing First In First Out (FIFO) method can only decode checksum which is encoded when initial register s state is zero, a Last In First Out (LIFO) method was proposed. First of all, by analyzing two kinds of serial encoding circuit based on transition of state matrix, the authors theoretically proved the matrix was invertible, and serial LIFO method and its circuit could be derived. Depending on serial method, rapid parallel LIFO method was given, in no need of dummy bits, thus simplifying the calculation process. A case study verified the correctness of this method when decoding checksum, no matter what initial register s state was. The simulation results show that FIFO and LIFO have similar calculation speed.Cyclic Redundancy Check (CRC) has already been used in the field of computer network widely. Existing First In First Out (FIFO) method can only decode checksum which is encoded when initial register’s state is zero, a Last In First Out (LIFO) method is proposed. First of all, by analyzing two kind of serial encoding circuit based on transition of state matrix, the authors theoretically proved the matrix was invertible, serial LIFO method and its circuit could be derived. Depending on serial method, rapid parallel LIFO method was given, no needing dummy bits, simplifying the calculation process. Example verified the correctness of this method when decoding checksum, no matter what initial register’s state was. The simulation results show that FIFO and LIFO have similar performance of calculation speed.英文关键词Key words:Cyclic Redundancy Check (CRC); First In First Out (FIFO); initial state; Last In First Out (LIFO); calculation speed0 引言目前,在计算机通信领域,由于数据在传输或存储过程中会受到各种干扰产生误码,从而需要进行数据校验来确保数据的完整性,循环冗余校验(Cyclic Redundancy Check, CRC)是一种常用的方法[1-2],Peterson等提出了两种串行编码电路[3],Giuseppe等[4]和Cheng等[5]分别从不同的角度提出了并行编码方式;为了破解软件中CRC校验值的保护,Stigge等从串行编码计算方法角度提出了一种按位进行的CRC逆向求解方法[6]。
CRC生成与同构逆序校验方法_梁海华

微 电 子 学 与 计 算 机 M I C R O E L E C T R ON I C S &C OMP UT E R
V o l . 3 1 N o . 9 S e t e m b e r 0 1 4 2 p
C R C 生成与同构逆序校验方法
梁海华 ,盘丽娜 ,李克清
… … … …
0燄 0 … .设 输 入 的 处 理 序 列 1
( 、 )对应 I I型C R C 生成电路 0 =1 m =1 p p
此, 若图1中的初始状态为I 图2中的初始状态 N I T, 为Fm I N I T 时, I型 、 I I型电路生成的 C R C值相等 , ; , 两种电路等效 同理 若图 2 中的初始状态为I N I T, 图 1 中的初始状态为 F-m I N I T( F-1 为 F 的逆矩 ]已证明其存在 ) , 文献 [ 两种电路也等效 . 阵, 5
1 引言
在计 算 机 通 信 领 域 , 数据在传输或存储过程中 会受到各种干扰产 生 误 码 , 从而需要进行数据校验 来确保数据的完整性 , 循环冗余校验 ( C c l i c R e d u n - y
] 1 2 - , 是 一 种 常 用 的 方 法[ d a n c C h e c k,C R C) P e t e r - y [ ] 3 4 - , 即 I型、 s o n 提出 了 两 种 串 行 编 码 电 路 I I型 电
…
电路 ( 寄存器为零初 态 ) 进 行 校 验, 电路输出结果为 生成电路寄存器状态的逆序 .
a L 烆 烎 烎 ( ) 1
m m-1 1 图 3 p + … +p mX + m-1X 1X + 0 p p
CRC校验实现方法

CRC校验实现方法CRC原理CRC是什么东西呢?你用过RAR和ZIP等压缩软件吗?它们是不是常常会给你一个恼人的“CRC校验错误”信息呢?我想你应该明白了吧,CRC就是块数据的计算值,它的全称是“Cyclic Redundancy Check”,中文名是“循环冗余码”,“CRC校验”就是“循环冗余校验”。
CRC有什么用呢?它的应用范围很广泛,最常见的就是在网络传输中进行信息的校对。
其实我们大可以把它应用到软件保护中去,因为它的计算是非常非常非常严格的。
严格到什么程度呢?你的程序只要被改动了一个字节(甚至只是大小写的改动),它的值就会跟原来的不同。
所以只要给你的“原”程序计算好CRC值,储存在某个地方,然后在程序中随机地再对文件进行CRC校验,接着跟第一次生成并保存好的CRC值进行比较,如果相等的话就说明你的程序没有被修改/破解过,如果不等的话,那么很可能你的程序遭到了病毒的感染,或者被Cracker用16进制工具暴力破解过了。
我们先来看看CRC的原理。
首先看两个式子:式一:9 / 3 = 3 (余数 = 0)式二:(9 + 2 ) / 3 = 3 (余数 = 2)在小学里我们就知道,除法运算就是将被减数重复地减去除数X 次,然后留下余数。
所以上面的两个式子可以用二进制计算为:(不会二进制计算的可以撤退了)式一:1001 - 0011 =0110 对应的十进制等式为:9-3=6;0110 - 0011 =0011 对应的十进制等式为:6-3=3;0011 – 0011 =0000 对应的十进制等式为:3-3=0;一共减了3次,所以商是3,而最后一次减出来的结果是0,所以余数为0。
式二:1011 - 0011 =1000 对应的十进制等式为:11-3=8;1000 - 0011 =0101 对应的十进制等式为:8-3=5;0101 – 0011 =0010 对应的十进制等式为:5-3=2;一共减了3次,所以商是3,而最后一次减出来的结果是2,所以余数为2。
crc校验原理及步骤

crc校验原理及步骤嘿,咱今儿就来聊聊这 CRC 校验!你说这 CRC 校验啊,就像是给数据穿上了一件特别的“保护衣”。
它的原理呢,其实挺有意思。
就好像我们要识别一群人里有没有冒牌货,得有个特别的办法来判断。
CRC 校验就是通过一种特定的计算方式,给数据生成一个独一无二的“标记”。
那具体步骤是咋样的呢?首先啊,得选个合适的生成多项式,这就好比选一把合适的钥匙。
然后呢,把要校验的数据当成宝贝一样,和这个生成多项式一起进行一番奇妙的运算。
这运算过程啊,就像是一场数据的舞蹈,各种数字在里面蹦跶、组合。
等这舞蹈结束,就得到了一个校验码。
这个校验码可重要啦,就像人的身份证号一样,能证明数据的身份。
当数据要传输或者存储的时候,就把这个校验码也带上。
等数据到了目的地,接收方再按照同样的步骤来一次,看看算出来的校验码和带来的一不一样。
如果一样,那就说明数据在旅途中没出啥问题,完好无损地到达啦!要是不一样呢,哎呀,那可就麻烦啦,说明数据可能在途中遭遇了什么“小意外”,得赶紧找找问题出在哪儿。
你想想,要是没有这 CRC 校验,那数据在传输过程中出了错都不知道呢!这就好像我们寄个重要包裹,没有保价一样,心里多不踏实呀!CRC 校验在很多地方都大显身手呢!比如在通信领域,它能确保信息准确无误地传达;在计算机存储中,它能保证数据的可靠性。
它就像一个默默无闻的守护者,时刻守护着数据的安全。
所以啊,可别小瞧了这 CRC 校验,它虽然听起来有点复杂,但作用可大着呢!它就像是数据世界里的一位忠诚卫士,为我们的数据保驾护航,让我们能安心地使用和传输数据。
你说是不是很厉害呢?。
crc校验方式

crc校验方式一、引言在数据通信中,为了保证数据的完整性和正确性,常常需要对数据进行校验。
CRC(Cyclic Redundancy Check)是一种常用的校验方式,它可以通过计算数据的循环冗余校验值来检测数据是否被篡改。
本文将对CRC校验方式进行详细介绍。
二、CRC校验原理1. CRC码的生成过程CRC码的生成过程是通过将原始数据与一个预设的多项式进行异或运算得到的。
具体步骤如下:(1)将原始数据添加k个0,使其长度为n+k位。
(2)将多项式P左移k位得到G(x)。
(3)将n+k位的原始数据除以G(x),得到商Q(x)和余数R(x)。
(4)将余数R(x)作为CRC码添加到原始数据后面,得到n+k位的带CRC码的数据。
2. CRC校验过程接收方收到带有CRC码的数据后,会对其进行如下操作:(1)将接收到的n+k位带CRC码的数据除以G(x),得到商Q'(x)和余数R'(x)。
(2)如果R'(x)等于0,则认为接收到的数据没有发生错误;否则认为接收到的数据发生了错误。
三、CRC校验实现方法1. CRC-8CRC-8是一种8位的CRC校验方式,它的多项式为x^8+x^2+x^1+x^0。
其校验码长度为1字节(8位),可以用于检测数据传输中的单比特错误。
2. CRC-16CRC-16是一种16位的CRC校验方式,它的多项式为x^16+x^15+x^2+1。
其校验码长度为2字节(16位),可以用于检测数据传输中的双比特错误。
3. CRC-32CRC-32是一种32位的CRC校验方式,它的多项式为x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+ x^5+x^4+ x3+ x + 1。
其校验码长度为4字节(32位),可以用于检测数据传输中的多比特错误。
四、CRC校验应用场景1. 网络通信在网络通信中,数据传输过程中可能会发生丢包、重发等问题,使用CRC校验可以有效地检测并纠正这些问题。
CRC校验原理及步骤

CRC校验原理及步骤什么是CRC校验?CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。
循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
CRC校验原理:其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。
当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。
到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。
因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。
如果有余数,则表明该帧在传输过程中出现了差错。
模2除法:模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。
在循环冗余校验码(CRC)的计算中有应用到模2除法。
例:CRC校验步骤:CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准,但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,计算出CRC码。
具体步骤:1. 选择合适的除数2. 看选定除数的二进制位数,然后再要发送的数据帧上面加上这个位数-1位的0,然后用新生成的帧以模2除法的方式除上面的除数,得到的余数就是该帧的CRC校验码。
注意,余数的位数一定只比除数位数少一位,也就是CRC校验码位数比除数位数少一位,如果前面位是0也不能省略。
3. 将计算出来的CRC校验码附加在原数据帧后面,构建成一个新的数据帧进行发送;最后接收端在以模2除法方式除以前面选择的除数,如果没有余数,则说明数据帧在传输的过程中没有出错。
CRC校验原理及步骤

CRC校验原理及步骤CRC(Cyclic Redundancy Check)校验是一种常用的错误检测方法,用于验证数据传输过程中是否存在错误。
CRC校验采用生成多项式对数据进行计算,从而生成一个固定长度的冗余校验码,将该校验码附加在数据后面进行传输,接收方利用同样的生成多项式对接收到的数据进行计算,并与接收到的校验码进行比较,如果校验码一致,则认为数据传输没有错误;如果校验码不一致,则认为数据传输存在错误。
1.选择生成多项式:在进行CRC校验前,需要选择一个生成多项式。
常用的生成多项式有:CRC-8,CRC-16,CRC-32等。
根据实际情况选择不同的生成多项式。
2.数据填充:在数据的末尾添加一组"0",长度等于生成多项式的次数加1、例如,如果选择的生成多项式为CRC-8,则在数据末尾填充一组"0",长度为9;如果选择的生成多项式为CRC-16,则在数据末尾填充一组"0",长度为173.生成校验码:利用生成多项式对填充后的数据进行除法运算,计算余数。
余数即为校验码。
通常,余数的位数为生成多项式的次数。
4.将校验码添加到数据中:将生成的校验码添加到数据末尾,并进行传输。
5.接收方计算校验码:接收方接收到数据后,利用接收到的数据和相同的生成多项式进行除法运算,计算余数。
6.比较校验码:接收方得到余数后,将其与接收到的校验码进行比较。
如果两者一致,则认为数据传输没有错误;如果两者不一致,则认为数据传输存在错误。
CRC校验的原理是利用多项式除法运算,将数据作为一个伪多项式进行计算,并得到一个余数。
由于多项式的特性,如果在数据传输过程中出现了错误,那么接收方计算得到的余数一定与发送方生成的校验码不一致。
通过比较余数和校验码,接收方可以判断数据是否传输正确。
1.简单高效:CRC校验算法计算速度快,适用于高速数据传输。
2.安全性高:CRC校验算法能够高效地检测出多种错误,包括单比特错误、双比特错误等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
快速CRC逆序校验方法
作者:梁海华盘丽娜
来源:《计算机应用》2013年第07期
文章编号
摘要:
循环冗余校验(CRC)是计算机网络中常用的冗余校验方法。
针对现有的正序(FIFO)校验方法只能对编码寄存器为零初始状态时生成的校验值正确校验的问题,提出一种逆序(LIFO)校验方法。
首先,使用状态矩阵对两类串行编码电路进行分析,理论上证明状态矩阵可逆,由逆矩阵变换得出串行逆序校验方法及其电路;通过电路分析,可将串行逆序方法扩展为快速并行逆序方法,无须预补零操作,简化了计算流程。
通过实例计算,验证了并行逆序方法能够对任意初始状态生成的校验值正确校验;仿真结果表明该方法具有与并行正序校验方法近似的运算速度。
关键词:循环冗余校验;先进先出;初始状态;后进先出;运算速度
中图法分类号:TP393文献标志码:A
英文标题
英文作者名
英文地址(
School of Computer Science and Engineering, Changshu Institute of Technology, Changshu Jiangsu 215500, China英文摘要
Abstract:
Cyclic Redundancy Check (CRC) has already been used in the field of computer network widely. Since the existing First In First Out (FIFO) method can only decode checksum which is encoded when
First Out (LIFO) method was proposed. First of all, by analyzing two kinds of serial encoding circuit based on transition of state matrix, the authors
theoretically proved the matrix was invertible, and serial LIFO method and its circuit could be derived. Depending on serial method, rapid parallel LIFO method was given, in no need of dummy bits, thus simplifying the calculation process. A case study verified the correctness of this method when
The simulation results show that FIFO and LIFO have similar calculation speed.
Cyclic Redundancy Check (CRC) has already been used in the field of computer network widely. Existing First In First Out (FIFO) method can only decode checksum which is encoded when initial register’s state is zero, a Last In First Out (LIFO) method is proposed. First of all, by analyzing two kind of serial encoding circuit based on transition of state matrix, the authors theoretically proved the matrix was invertible, serial LIFO method and its circuit could be derived. Depending on serial method, rapid parallel LIFO method was given, no needing dummy bits, simplifying the calculation process. Example verified the correctness of this method when decoding checksum, no matter what initial register’s state was. The simulation results show that FIFO and LIFO have similar performance of calculation speed.
英文关键词
Cyclic Redundancy Check (CRC); First In First Out (FIFO); initial state; Last In First Out (LIFO); calculation speed
0 引言
目前,在计算机通信领域,由于数据在传输或存储过程中会受到各种干扰产生误码,从而需要进行数据校验来确保数据的完整性,循环冗余校验(Cyclic Redundancy Check, CRC)是一种常用的方法[1-2],Peterson等提出了两种串行编码电路[3],Giuseppe等
[4]和Cheng等[5]分别从不同的角度提出了并行编码方式;为了破解软件中CRC
校验值的保护,Stigge等从串行编码计算方法角度提出了一种按位进行的CRC逆向求解方法[6]。
本文从编码电路状态分析入手提出一种并行的快速CRC逆序校验方法;解决现
有CRC校验方法只能判定编码电路零初始状态时生成的校验值是否正确的问题;解决现有方
法中需预先填零操作,使得处理数据长度是并行处理位宽整数倍的问题[7],提高处理的实时性。
一般编码及校验方法:发送信息序列-对应多项式为
--,生成多项式
--,校验序列
对应多项式为----,发送序列;接收序列
,如果无差错接收,则,否则出
错。
图1为现有级串行CRC编码器的结构示意图,寄存器初始状态一般情况下为全零(即零初态);图2为现有级串行CRC解码器结构示意图,解码器为零初态。