crc算法原理及c语言实现

crc算法原理及c语言实现

ID:6332566

大小:362.50 KB

页数:39页

时间:2018-01-10

crc算法原理及c语言实现_第1页
crc算法原理及c语言实现_第2页
crc算法原理及c语言实现_第3页
crc算法原理及c语言实现_第4页
crc算法原理及c语言实现_第5页
资源描述:

《crc算法原理及c语言实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、(一)CRC算法原理及C语言实现1.CRC原理介绍CRC的英文全称为CyclicRedundancyCheck(Code),中文名称为循环冗余校验(码)。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。CRC计算与普通的除法计算有所不同。普通的除法计算是借位相减的,而CRC计算则是异或运算。任何一个除法运算都需要选取一个除数,在CRC运算中我们称之为poly,而宽度W就是poly最高位的位置。比如poly1001的W是3,而不是4。注意最高位总是1,当你选定一个宽度,那么你只需要选择低W各位的值

2、。假如我们想计算一个位串的CRC码,并要保证每一位都要被处理,因此我们需要在目标位串后面加上W个0。下面举例说明CRC算法的过程。在此例中,我们假设位串为110101101。Poly(除数)=10011(宽度W=4)Bitstring+W个0=110101101000010011/1101011010000/110000101(我们不关心此运算的商)10011

3、

4、

5、

6、

7、

8、

9、

10、-------

11、

12、

13、

14、

15、

16、

17、

18、10011

19、

20、

21、

22、

23、

24、

25、10011

26、

27、

28、

29、

30、

31、

32、-------

33、

34、

35、

36、

37、

38、

39、00001

40、

41、

42、

43、

44、

45、00000

46、

47、

48、

49、

50、

51、-------

52、

53、

54、

55、

56、

57、

58、00010

59、

60、

61、

62、

63、00000

64、

65、

66、

67、

68、-------

69、

70、

71、

72、

73、00101

74、

75、

76、

77、00000

78、

79、

80、

81、-------

82、

83、

84、

85、01010

86、

87、

88、00000

89、

90、

91、-------

92、

93、

94、10100

95、

96、10011

97、

98、-------

99、

100、01110

101、00000

102、-------

103、1110010011-------1111->余数->CRC!计算过程总结如下:1.只有当位串的最高位为1,我们才将它与poly做XOR运算,否则我们只是将位串左移一位。2.异或运算的结果实质上是被操作位串与poly的低W位进行运算的结果,因为最高位总为0。 2.CRC原理及其逆向破解

104、方法:2.1介绍:这篇短文包含CRC原理介绍和其逆向分析方法,很多程序员和破解者不是很清楚CRC的工作原理,而且几乎没人知道如何逆向分析它的方法,事实上它是非常有用的。首先,这篇教程教你一般如何计算CRC,你可以将它用在数据代码保护中。第二,主要是介绍如何逆向分析CRC-32,你可以以此来分析程序中的CRC保护(象反病毒编码)。当然有很多有效的工具用来对付CRC,但我怀疑它是否会说明原理。我要告诉你,这篇短文里中应用了很多数学知识,这不会影响一些人,而且会被一般的程序员与逆向分析者很好理解,为什么?那么如果你不知道数学是如何被应用在CRC中,我

105、建议你可以停止继续学习了。所以我假定你们(读者)都是具备二进制算术知识的。2.2第一部分:CRC介绍,CRC是什么和计算CRC的方法2.2.1循环冗余码CRC我们都知道CRC,甚至你没有印象,但当你想到那些来自诸如RAR,ZIP等压缩软件发给你由于错误连接和其他一些意外原因导致的文件错误的恼人的消息时,你就会知道。CRC是块数据的计算值,比如对每一个文件进行压缩,在一个解压缩过程中,程序会从新计算解压文件的CRC值,并且将之与从文件中读取的CRC值进行比对,如果值相同,那么正确。在CRC-32中,会有1/2^32的可能性发生对确认数据更改的校验

106、错误。很多人认为CRC就是循环冗余校验。假如CRC真的就是循环冗余校验,那么很多人都错用了这个术语。你不能说"这个程序的CRC是12345678"。人们也常说某一个程序有CRC校验,而不说是"循环冗余校验"校验。结论:CRC代表循环冗余码,而不是循环冗余校验。计算是如何完成的呢?好,主要的想法就是将一个文件看成一个被一些数字分割的很长的位字串,这里会有一个余数-CRC!你总会有一个余数(可以是0),它至多比除数小1。(9/3=3余数=0;(9+2)/3=3余数=2)(或者它本身就包含一个除数在其中)。在这里CRC计算方法与除法有一点点区别,除法

107、就是将被减数重复的减去除数X次,然后留下余数。如果你希望得到原值,那么你就要把除数乘上X次,然后加上余数。CRC计算使用特殊的减法与加法完成的,也就是一种新的"算法"。计算中每一位计算的进位值被"忽略"了。看如下两个例子,(1)是普通减法,(2)和(3)是特殊的。(1)(2)(3)1101101010100+0=00-0=01010-1111+1111-0+1=1*0-1=1—————————1+0=11-0=1001101010101*1+1=01-1=0在(1)中,右数第二列可以看成是0-1=-1,因此要从高位借1,就变成(10+0)-1=

108、1,(这就象普通的'by-paper'十进制减法)。特例(2,3)中,1+1会有正常的结果10,“1”是计算后的进位,这个值被忽略了。特殊情况0-1应

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。