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

How do i reverse engineer a known Cyclic Redundancy Check value?

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

你可以试试RevEng,就是为了这个,从一组例子中确定CRC参数。

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

我觉得自己像个白痴。 当我计算我的 CRC 时,我正确地执行了每一步,除了最后一步,您必须执行 LSB 优先规则而不是反转余数。 我只执行了 LSB 优先规则(认为这就是反转的意思)。 因此,对于 00011101 的余数,我得到了错误的 CRC 值 (10111000)。当我应该得到 01000111 时。