打印

“手动的”CRC16IBM(A001)的16字表长查表演算过程

[复制链接]
3054|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2009-10-18 23:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
参见: CRC-16-IBM(A001)的16字表长查表程序
CRC16Table[16]={
  0x0000,0xCC01,0xD801,0x1400,0xF001,0x3C00,0x2800,0xE401,
  0xA001,0x6C00,0x7800,0xB401,0x5000,0x9C01,0x8801,0x4400//注意本行的0xA001
};
例如 CRC16,初值为0x0000, 求CRC16[0x1234]=0xCD96

第1步:
CRC[0x1234&0x0F]=CRC[0x04]=0xF001
0x1234变为0x0123

第2步:
(0xF001>>4) ^ CRC[(0xF001&0x0F) ^ (0x0123&0x0F)]=0x0F00 ^ CRC[0x01 ^ 0x03]
=0x0F00 ^ CRC[0x02]=0x0F00 ^ 0xD801= 0xD701
0x0123变为0x0012

第3步:
(0xD701>>4) ^ CRC[(0xD701&0x0F) ^ (0x0012&0x0F)]=0x0D70^ CRC[0x01 ^ 0x02]
=0x0D70^ CRC[0x03]=0x0D70^ 0x1400= 0x1970
0x0012变为0x0001

第4步:
(0x1970>>4) ^ CRC[(0x1970&0x0F) ^ (0x0001&0x0F)]=0x0197^ CRC[0x00 ^ 0x01]
=0x0197^ CRC[0x01]=0x0197^ 0xCC01= 0xCD96
演算结果0xCD96正确。


例如 CRC16,初值为0xFFFF, 求CRC16[0x1234]=0x7D97:

初始化: 0x1234 ^ 0xFFFF = 0xEDCB
第1步:
CRC[0xEDCB&0x0F]=CRC[0x0B]=0xB401
0xEDCB变为0x0EDC

第2步:
(0xB401>>4) ^ CRC[(0xB401&0x0F) ^ (0x0EDC&0x0F)]=0x0B40^ CRC[0x01 ^ 0x0C]
=0x0B40^ CRC[0x0D]=0x0B40^ 0x9C01= 0x9741
0x0EDC变为0x00ED

第3步:
(0x9741>>4) ^ CRC[(0x9741&0x0F) ^ (0x00ED&0x0F)]=0x0974^ CRC[0x01 ^ 0x0D]
=0x0974^ CRC[0x0C]=0x0974^ 0x5000= 0x5974
0x00ED变为0x000E

第4步:
(0x5974>>4) ^ CRC[(0x5974&0x0F) ^ (0x000E&0x0F)]=0x0597^ CRC[0x04 ^ 0x0E]
=0x0597^ CRC[0x0A]=0x0597^ 0x7800= 0x7D97
演算结果0x7D97正确。


使用演算工具:http://www.hotc51.com/HotPower_HotWC3.html

或查表:

CRC16Table[16]={
  0x0000,0xCC01,0xD801,0x1400,0xF001,0x3C00,0x2800,0xE401,
  0xA001,0x6C00,0x7800,0xB401,0x5000,0x9C01,0x8801,0x4400//注意本行的0xA001
};





16*2个字节“比拼”256*2个字节的结果:
循环次数是4次,而后者为2次。即速度降低1倍但空间被压缩16倍,不知菜农失败否~~~



相关帖子

沙发
duojinian| | 2009-10-19 08:51 | 只看该作者
download it.thanks

使用特权

评论回复
板凳
hotpower|  楼主 | 2011-12-26 13:13 | 只看该作者
顶起来,掀起密码安全教育风暴~~~

使用特权

评论回复
地板
hotpower|  楼主 | 2012-10-23 19:02 | 只看该作者
挖墓为2012.10.25菜农个人版《HotWC3密码体系》开版搜索

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21619

帖子

506

粉丝