如何对已知的循环冗余校验值进行反向工程?

时间:2016-10-03 14:15:27

标签: error-handling binary hex crc cyclic

所以我在查找一系列命令的CRC值时遇到问题,我已经掌握了一些命令的CRC值,但我需要弄清楚它们是如何计算的。仔细检查数据流并尝试计算CRC后,我们无法获得已知的CRC值和计算出的CRC值。我之前从未计算过CRC,但是我已经阅读了多篇论文并且它看起来很容易,除了它不起作用的事实。我所说的手册中的多项式生成器是(x ^ 8 + x ^ 7 + X ^ 2 + X ^ 0),它给出了一个唯一的非零值B1(十六进制)。完整命令是A9E40401(十六进制),CRC为1E(十六进制)。我目前使用的过程涉及将数据流从十六进制转换为二进制,使用LSB优先规则,将FF(十六进制)插入命令以检测无关的零,将00(十六进制)添加到结尾作为占位符而不是执行mod2除法,然后将其反转并应用于数据流。要么我做错了,要么错过了一步。我假设我提供的多项式是正确的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以尝试RevEng,正是这样,从一组示例中确定CRC参数。

然后您可以使用crcany生成代码。

答案 1 :(得分:0)

我觉得自己像个白痴。 当我计算我的CRC时,除了最后一步你必须执行LSB优先规则而不是反转余数之外,我做了每一步。 我只执行了LSB第一条规则(认为反转意味着什么)。 因此,对于余下的00011101,我得到了错误的CRC值(10111000)。什么时候我应该得到01000111.