是否确认反向CRC-8值?

问题描述 投票:-1回答:1

我花了很多时间来确认两个设备之间ASCII数据通信中使用的CRC-8算法的类型。我已经确认,CRC是根据文本字节的0x02开始+数据的下一个字节计算得出的。我已经描述了一种设备的接口设计文档指定了初始值为0xFF的0xEA多项式的使用。下面是一条捕获的消息的示例:

输入字节: 0x02 0x41

CRC结果: b10011011或0x9B

进入这个问题,我对典型的CRC算法的内部工作几乎一无所知。最初,我尝试对输入字节进行手工计算,以确认我对算法的理解,然后再尝试代码解决方案。这涉及将第一个输入字节与我的0xFF初始值进行XOR,然后跳到第二个输入字节以继续XOR操作。]

[在尝试通过典型的XOR操作多次确认CRC的同时,在每一步中将MSB移出了寄存器,我始终无法获得想要的结果。今天,我意识到0xEA多项式也被认为是0xD5多边形的倒数,带有隐含的1 + x ^ 8,通常在CRC-8算法中使用。这个事实如何改变我如何手动计算CRC?我读过,在某些情况下,反向会导致算法右移位而不是左移?

我花了很多时间来确认两个设备之间ASCII数据通信中使用的CRC-8算法的类型。我已经确认CRC是从0x02的...开始计算的。

c# math cryptography crc crc8
1个回答
1
投票

[多项式是将0x1AF位反转为0x1F5(0xEA ==(0x1F5 << 1)&0xFF。示例代码。可以使用256字节的表查找来替换内部循环。

© www.soinside.com 2019 - 2024. All rights reserved.