我怎么能猜出校验和算法?

时间:2008-11-18 12:22:45

标签: checksum crc

如果给出了给定的代码+ 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

这些代码来自RF(433MHz)发送器,如X10产品。

我不确定这是CRC还是它是什么,但至少它是以某种方式计算出来的。

有人可以帮忙吗?

更新

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

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

9 个答案:

答案 0 :(得分:5)

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

对我而言,这看起来像某种奇偶校验,ECC(实际上是FEC)或Reed-Solomon代码。可能是Hamming Code - 汉明在工业,电信中广泛使用。

答案 1 :(得分:3)

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

猜测所有可能的CRC(或哈希算法)看起来并不太乐观。只需看看here

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

祝你好运:)

答案 2 :(得分:2)

@mecki可能是正确的,但很难知道。您可以尝试Data format for X-10 wireless unitsX-10 FAQ

答案 3 :(得分: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个。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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