打印

[转贴]悟空,CRC原来是这么回事!

[复制链接]
楼主: leasor
手机看帖
扫描二维码
随时随地手机跟帖
41
zeromicro| | 2007-4-11 14:00 | 只看该作者 回帖奖励 |倒序浏览

例如我要发送的数据为0X01

用G(X)=X8+X5+X4+1多项式计算CRC值怎么做?


在倒数第二行初值里面填00,输入填0100?
最后的CRC方式选8位右移?点计算后在CRC框得到C4,这个值对吗?好象不对把,0X01用X8+X5+X4+1计算的CRC值不是为0X5E吗?

郁闷。

请XWJ老师/chunyang老师指导。

使用特权

评论回复
42
xwj| | 2007-4-11 14:01 | 只看该作者

输入填01啊,为什么要填0100?

使用特权

评论回复
43
zeromicro| | 2007-4-11 14:02 | 只看该作者

哦,知道了,应该填01,不应该填0100,这样就是0X5E

两位老大帮俺看看我在36楼的帖子中的疑问?

使用特权

评论回复
44
zeromicro| | 2007-4-11 14:04 | 只看该作者

俺以为用CRC8,应该把后面的8位补齐呢

想错了,明白HOTPOWER大师的那个宝贝了

使用特权

评论回复
45
zeromicro| | 2007-4-11 16:17 | 只看该作者

哪个老板看看俺那36层的帖子啊?

俺还没弄明白啊 ……

使用特权

评论回复
46
hotpower| | 2007-4-12 02:06 | 只看该作者

倒塌了~~~这个软件开始设计的初衷就是对付CRC8~~~

所以,像DS18b02/ds1990/ds...
最后就将我多年之学溶入了其中~~~

用CRC加密/解密~~~哈哈,我问过1位数学家---哈哈,他说我胡来~~~

可是答案摆在他面前~~~

说实话,本来是不能可逆的,但我稍做了修改~~~不知有人看出来否~~~

使用特权

评论回复
47
zeromicro| | 2007-4-12 08:28 | 只看该作者

嘿嘿,俺看不出来……

使用特权

评论回复
48
xwj| | 2007-4-12 08:34 | 只看该作者

哈哈,你那个所谓的“三角密码”,加密强度趋近于0

用CRC检验来做密码算法更是不合理,CRC的运算就是取多项式G(X)的余数,暴力**的话最多只要尝试G(X)次就可以试出正确的CRC码
对于16位CRC是69665次,8位CRC就是305次,这个也不会增加多少加密强度(运算量)的


hotpower 对加密解密有兴趣的话,可以去看看密码学相关的东西哦
免得让专家笑掉大牙啊 :-)

使用特权

评论回复
49
zeromicro| | 2007-4-12 09:08 | 只看该作者

资料上说计算CRC,按照这个公式计算:

     (X)·2^16               R(X)
    ----------   =  Q(X) + ----------
       G(X)                  G(X)
为什么要搞一大堆异或让人演算,而不直接给出这样类似的公式让人推导?

对于CRC8/16/32,是不是都可以用类似这个公式推导,俺用这个公式推导不出结果啊 。

例如:
要发送的数据0X01,使用G(X)=X8+X5+X4+1计算CRC值,按照公式应该是:
CRC=(0x0100)%G(X)
   =(0x0100)%(0x131)
   =???

使用特权

评论回复
50
zeromicro| | 2007-4-12 09:15 | 只看该作者

猜猜HOTPOWER的密码学说

HOTPOWER师的意思是不是随着发送数据的持续,CRC值在不断变化,它的密码也在动态调整,即使被人凑巧在一次通信数据发送中‘撞’中密码,但只要密码生成的方法不被人**,在下一次通信数据发送中,密码又改变了,这样可以避免采用固定密码数字让别人猜中后**。



嘿嘿,连蒙带猜加忽悠……

使用特权

评论回复
51
燕南啸| | 2007-4-12 09:55 | 只看该作者

路过学习了

使用特权

评论回复
52
xwj| | 2007-4-12 09:59 | 只看该作者

zeromicro ,你48楼的问题 去看我19楼贴中的红字

使用特权

评论回复
53
zeromicro| | 2007-4-12 10:37 | 只看该作者

看过了……

对于CRC-CCITT的多项式:X16+X12+X5+1
就是
CRC(n)=0x11021-(n<<16)%0x11021;


依然假设发送的数据为0X01,执行CRC-CCITT的计算后:
CRC(n)=0x11021-(0x01<<16)%0x11021
      =0x11021-0x010000%0x11021
      =0x11021-0x10000
      =0x1021
是这么计算的吗?

那个左移和右移不一样是为什么?左移、右移指什么数据左移、右移?
两种移动方式对应的计算方式{CRC(n)=0x11021-(n<<16)%0x11021}不一样吗?
如果不一样,左移的公式是CRC(n)=0x11021-(n<<16)%0x11021,那右移的公式是什么 ?

使用特权

评论回复
54
zeromicro| | 2007-4-12 10:47 | 只看该作者

对于CRC-CCITT的多项式:X16+X12+X5+1

就是
CRC(n)=0x11021-(n<<16)%0x11021;



那对于:
CRC8  = X8+X5+X4+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 

CRC(n)又是什么样的公式?
1:CRC8  = X8+X5+X4+1 
   这对不对?CRC(n)=0x131-(n<<8)%0x131
   发送数据为0X01时,CRC(n)=0X131-(0X01<<8)%0x131
                           =0X31
   这是CRC8左移的结果吗?CRC8右移怎么计算出0X5E?

使用特权

评论回复
55
zeromicro| | 2007-4-12 11:00 | 只看该作者

俺接着猜猜

假设用URAT发送0X01数据出去,需要CRC8校验,如果采样左移计算,则CRC值=0X31,把这个0X31附加在0X01后发出去,也就是发送0X01,0X31数据列,接受方接受到之后,重新按照CRC8左移校验计算0X01的CRC值,把结果和接受到的CRC数据比较,如果相等表示发送正确,不等就表示发送错误了。

所以这个左移/右移的CRC计算公式是不一样的,XWJ老师的公式可以推导左移,右移计算是不对的?!
左移有公式可以遵循,右移则按照什么规则计算CRC呢?

使用特权

评论回复
56
hotpower| | 2007-4-12 22:47 | 只看该作者

真为xwj的"用CRC检验来做密码算法更是不合理"倒塌~~~

实际上那个汽车电子给的网站里我上传了几个版本的CRC算法.不知还在否.

你现在看到的只是我的基本版,主要是为验证CRC/PEC的结果,故我称之为"网上计算器".

我认为菜农在CRC上"最大的成果"就是那个"权"字.

xwj语录:
用CRC检验来做密码算法更是不合理,CRC的运算就是取多项式G(X)的余数,暴力**的话最多只要尝试G(X)次就可以试出正确的CRC码
对于16位CRC是69665次,8位CRC就是305次,这个也不会增加多少加密强度(运算量)的


晕倒了~~~我真的想让专家把牙笑掉自己咽到肚子里去~~~
就那CRC8来说吧:
CRC8可以分为左移和右移2种.
在左移中,"权"的D7位无用.在右移中,"权"的D0位无用.
例如左移CRC8:
初值=0x00  权=0x81 源=0x33 结果CRC=0x55
初值=0x00  权=0x01 源=0x33 结果CRC=0x55

例如右移CRC8:
初值=0x00  权=0x81 源=0x33 结果CRC=0xEA
初值=0x00  权=0x80 源=0x33 结果CRC=0xEA

哈哈~~~就先到这里吧~~~

当初值,权,方向,D7D0都在"运动"时,难道菜农倒塌的CRC8让人305次就攻塌了???
想想这种CRC8+"三角密码"该有多少组合呀~~~
为何要"三角密码"加入???主要是乘方开方增加解密的计算量~~~

哈哈,我的密码学的书不少~~~

使用特权

评论回复
57
zeromicro| | 2007-4-13 15:20 | 只看该作者

俺好多问题……

嘿嘿,谁帮我解答解答?

使用特权

评论回复
58
haohanjie| | 2007-4-13 17:07 | 只看该作者

哇~哦~~

靠,唐僧使徒赶的不错,我终于明白了,CRC原来是通用数据传输的校验编码

使用特权

评论回复
59
hotpower| | 2007-4-13 22:07 | 只看该作者

关于CRC密码攻击次数问题的回复

http://www.**/blog/hotpower/21746/message.aspx#17064

谢谢panic关注此类问题!!!

这些道理我很明白.不过我是利用了CRC的多值特性来实现加密强度的.

在基本CRC中,它的本意是作为数据校验,肯定加密强度不高.

根据标准的CRC算法即CRC函数来分析,它的初值和权是不变的.如CRC8一般初值取0,权为0x18,采用右移.

本次CRC的计算结果(也可认为是密文)实际是下次CRC函数的初值.权不变(也可认为是密钥)

由于CRC的8位计算结果(可认为是8位密文)是由初值(可认为是8位密钥),权(可认为是8位密钥),源值(也可认为是8位明文)及左右移动算法(可认为是1位密钥)得出的,即17位密钥对8位明文计算得出了8位密文.

这样就产生了CRC多值不可逆的问题.

即1个密钥对1个明文计算得出很多相同的密文.

那么1个密文必对应很多相同的明文.

但只有1组正确的密钥,明文及密文.

所以8位CRC用256次攻击是不够的~~~这里我只说了"基本CRC"~~~

故对"变种的CRC"及CRC64的攻击次数肯定不是常人所想的那么简单~~~


相关链接:http://www.**/blog/hotpower/21977/message.aspx

使用特权

评论回复
60
zeromicro| | 2007-4-14 13:21 | 只看该作者

还是不明白啊……

假如现在要发送两个字节数据0X0100,采用CRC8左移计算CRC值怎么算?

用HOTPOWER的计算器算的结果应该是0XF4,怎么算出来的?

我是这么想的:
两个字节的数据0X0100,因为采用CRC8,所以可分为0X01,0X00分别计算CRC值,0X01的CRC值=0X31,把0X31作为CRC初值,再计算0X00数据的CRC值,得到0XF4。

把0X31做为初值计算0X00的CRC值执行什么样的计算可以得到0XF4?

使用特权

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

本版积分规则