5

如果给出了给定的代码 + CRC 字符串,我如何找出 CRC 算法?

我有几个由代码 + 匹配的 CRC 组成的字符串,但不知道如何计算有问题的 CRC,以便我可以生成更多代码字符串。以下是一些示例(16 位代码 + 4 位 CRC):

0010101000011101 + 0000
0010101000011111 + 0001
1000110011101101 + 0001
0000000000000100 + 0010
0011100011001110 + 0011
1000110011101110 + 0100
0001011110101100 + 0100
0010101000011110 + 0101
0011100011001101 + 0110
0001011110101111 + 0111
0011100011001100 + 1001
0011100011001111 + 1010
0001011110101101 + 1011
0000000000001000 + 1011
0000111100001101 + 1100
0000000000001100 + 1100
1111111111111111 + 1101
1000110011101111 + 1101
1000110011101100 + 1110
0001011110101110 + 1110
1111111100001101 + 1110
0010101000011100 + 1111

这些代码来自像 X10 产品这样的射频 (433MHz) 发送器。

我不确定这是 CRC 还是它是什么,但至少它以某种方式从这些代码字符串中计算出来。

更新

RE:找到我也认为是最好的解决方案的规范,但由于这不是选项,我需要以某种方式强制校验和计算。

这就是问题所在,我没有规格,也无法在任何地方得到它们。我已经尝试了几种不同的校验和计算方法而没有结果,有没有办法比较输入字符串找出它们的共同点,这样就可以得到算法

4

9 回答 9

5

是什么让您认为它是 CRC?通常 CRC 不用于这么小的数据。

在我看来,这更像是某种奇偶校验、ECC(实际上是FEC)或Reed-Solomon代码。可能是汉明码- 汉明码广泛用于工业和电信。

于 2008-11-18T13:18:54.577 回答
3

猜测是非常正确的词。如果此 RF 设备不是专有的,请尝试阅读规格!这将是最简单的方法。

猜测所有可能的 CRC(或散列算法)看起来并不太乐观。看看这里

第三种可能性是对用于生成校验和的代码进行逆向工程。

祝你好运 :)

于 2008-11-18T12:29:51.697 回答
2

@mecki可能是正确的,但很难知道。您可以尝试X-10 无线单元的数据格式X-10 常见问题解答

于 2008-11-18T20:07:52.613 回答
2
['0010101000011101', '0000', '0'] ['0010101000011110', '0101', '5'] [1, 3]
['1000110011101101', '0001', '1'] ['1000110011101110', '0100', '4'] [1, 3]
['0000000000000100', '0010', '2'] ['0000000000001000', '1011', 'b'] [0, 3]
['0011100011001110', '0011', '3'] ['0011100011001101', '0110', '6'] [1, 3]
['0001011110101100', '0100', '4'] ['0001011110101111', '0111', '7'] [2, 3]
['0011100011001100', '1001', '9'] ['0011100011001111', '1010', 'a'] [2, 3]
['0001011110101101', '1011', 'b'] ['0001011110101110', '1110', 'e'] [1, 3]
['1000110011101111', '1101', 'd'] ['1000110011101100', '1110', 'e'] [2, 3]

差异“分析”的结果,这看起来不像 crc,参考: http: //www.cosc.canterbury.ac.nz/greg.ewing/essays/CRC-Reverse-Engineering.html

我也怀疑它是汉明码,因为 4 个奇偶校验位只允许 11 个数据位,而不是 16 个。

于 2011-04-18T20:12:48.083 回答
0

可能它不是 CRC,但我仍然无法找出纠错/冗余算法。

于 2008-11-18T13:41:32.893 回答
0

有太多 CRC 算法的可能性无法有效猜测。您可以采取简单的方法,即为您的设备找到规格。或者您可以采用蛮力方法,即计算每个可能输入的 CRC,并创建一个生成相同结果的算法。

于 2008-11-18T12:40:55.090 回答
0

一个好的校验和算法的全部意义在于它与输入文本没有任何共同之处。您可以更改输入中的单个字符。并且整个校验和输出将会改变。所以走另一条路的唯一方法是,是的,猜测。如果您知道输入和输出字符串是什么,您可以尝试一些常见的校验和算法,看看它们中的任何一个是否给出了正确的输出。除此之外,不,这是不可能的。

或者,正如其他人所建议的那样,它可能根本不是校验和,而是某种纠错/冗余代码,这可能更容易弄清楚。

于 2008-11-18T13:27:38.507 回答
0

您可以尝试一些常见的 CRC 方法并希望幸运,但 Mana 的答案(寻找规格)将是最佳选择。

于 2008-11-18T12:50:35.850 回答
0

从字符串的长度与校验和的长度来看,我会说这是一个简单的 1 错误纠正校验和。它可能是使用汉明距离的简单方法之一。我不记得它是如何工作的,而且我没有任何信息论/线性代数教科书。

于 2008-11-18T20:21:19.653 回答