老师水潭博客摘录:
“课本的经典的CRC算法几乎全是右移及查表的。
我研究了CRC十余年,最后“悟出”了CRC还可分左右移,可逆等“硬道理”并通过实战,效果非常好。” ******************************************************************** 就这么简单个问题HOT老师研究了十几年?!.......
先讲一个故事: 上高中时,一天和同学A的大哥一起打牌。4人围一张玻璃面圆桌,我坐在大哥左手位置,同学坐在大哥右手位置;
摸牌,大哥说:“顺时针,我先摸。”顺时针,当然我轮第二,但是大哥制止了我:
“应该A第二。”
“不是顺时针吗?”说着我在桌面上比划了一下。
“我是从底下向上看的。”大哥说着在玻璃板底下反方向划了一圈。
大家笑笑,大哥的视角是在桌子下面!与众不同。从那时起,我就领悟:看任何事物,都至少有正、反2个视角;它将得到看似不同、又似相同的结果。
现在HOT老师应该明白了:您十几年研究的CRC算式除了正序左移、“还可以反序右移”,不过是您从没有想到过站到CRC运算电路的背面去观察电路运算过程! 那样,视角将变换180℃ ,正序左移变换为反序右移,正视poly=8005H 变换为反序A001H;或者由1021H变换为8408H;所有正序CRC码都将反序!例如:
FE/11021=F1 余数 0ED1h 反序 8B70H 10/11021=11 余数 1231H 反序 8C48H FF/11021=F0 余数 1EF0h 反序 0F78H
这不过是正、反两个方向的不同视角得到的不同结果。但相对多项式除法算式还是同一个,不过是把余数反序。(得到2个余数)。
最终还是一回事!
究其原因,是因为通信控制器总是从报文字节的低位开始发送,结果,送入运算器的数据总是要求反序;例如报文:
3368F574H
长除法实际计算输入值为:CC16AF2E0000H
* HOT老师所谓的加密、解密,竟然就是把余数和报文同时反相!举例: 假设报文=1E1AH,G(x)=11021H
1E1AH 余数为 9307H (这是16位左移计算。) 那么对应反序为: 5878H 余数 E0C9H 这算是加密了?小孩子玩游戏呢。这么简单的算术反序难道还要用“16位右移还原CRC反函数计算”?
就这么简单的一个方向视角变换方法,让HOT老师研究思索了十几年!?
贻笑大方。
|