首页
社区
课程
招聘
菜鸟学习CRC32算法的一点点小心得
发表于: 2005-8-13 14:54 8634

菜鸟学习CRC32算法的一点点小心得

2005-8-13 14:54
8634
这几个月刚接触crack,每天都看到前辈高手们的文章里,写些什么CRC校验,于时就在网上找了好多相关的资料,同时也找了加密与解密光盘上的那篇译文,发现,不是写的过于简单,就是写的过于复杂,有的还兜了好几个圈圈,看的俺是一头雾水~~~~~最后,没有办法,就找到的罗大大的汇编源代码,再配合光盘上的那篇文章,得出了CRC32校验的一个流程,不知道我的理解是否正确,如有错误之处,还请大大们指出,小弟不胜感激

首先,生成一个256组的32位码表(用于和运算过程中的CRC值做异或运算.当运算结束后,就不起作用了,我想许多新手都和我一样,最开始都不能理解这个码表的作用是什么,我在这上面也兜了好多圈圈,个人觉得,这个码表的生成公式可以自已写,没必要按照文章上的那个循环得到.)

再次,设4个变量,
    1, a 32位的变量,用来存放CRC,要设一个初值.教程里设的是0xffff
    2, b 是8位的变量   (用来临时存放需要处理的字节,与下面的c配合使用)
    3, c 32位,初值存放需要CRC校验的字符串或文件的第一个字符的内容的首地址
    4, d 32位,初值为指向256组码表的首地址

得到需要CRC校验的字符串或文件的长度e
{循环 e 次
    把变量c指向的内容附值给b
    变量b的变量a的后八位做异或运算,并将结果保存在b
    去掉变量a后八位,在其前8位用0填补(也就是 右补8位)
  然后再和码表d的第b项(相当于高级语言里的数组d)做异或运算结果存放在a.
    c+1(指向下一个字节)
}

再把变量a的值取反,所得的值就是最后的CRC

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这是查表法。

其实可以用多项式除法的最基本原理来实现。

不过这样你的程序就要写的有效率。否则,原文太长的话,程序会转很长时间。
2005-8-14 12:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
鄙人也实现了CRC32,不过是用多项式除法原理实现的。处理10MB文件不成问题。

也试过50MB的RMVB,也很快。

更大的文件,还没试过。不过相信也不会慢。

关键是指针操作“效率飞快”。
2005-8-14 12:57
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵,刚学,请问多项式除法是怎么实现的呢?
可否贴点资料出来
2005-8-15 09:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
CRC的原理就是多项式除法。
2005-8-15 15:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
而且CRC16和CRC32原理一样,唯一不同的就是标准的除式多项式不同。

余数就是CRC码。

简单吧?
2005-8-15 15:35
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
原理是不是只需把除式中操作数的位数扩展?
2005-8-15 17:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
16和32都有标准的除式。什么CCITT或什么C...;总之,好几个标准化组织都给出了除式。

但,为什么这些除式好。我没研究过。
2005-8-17 08:28
0
游客
登录 | 注册 方可回帖
返回
//