我该如何猜测校验和算法?

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或其他什么,但至少它是通过那些代码字符串之一计算出来的。
更新:
关于找到规格,我认为这是最好的解决方案,但由于这不是选项,我需要想办法强制进行校验和计算。
这就是问题所在,我没有规格,也无法从任何地方获得规格。我尝试了几种不同的校验和计算方法,但没有结果,难道没有一种方法可以比较输入字符串找出它们共有的内容,从而获取算法吗?

相关链接:https://dev59.com/QUXRa4cB1Zd3GeqPuMH7 - activout.se
请解释一下RF发送器和X10技术是什么。也许http://www.x10.com/minisites/videosender/rf_systems_pro_3250_wireless_video_sender.html与此有关。如果是这样的话,Tom应该向我们解释你需要什么。我们不应该猜测你需要什么! - Jonathan Leffler
RF插座(EMW100)来自www.everflourish.com.cn,重新品牌为Cotech,由www.clasohlson.fi销售,发射器- http://www.clasohlson.se/Archive/Images/Products/Hi/361183A_X_2007-06-27_161950_278.jpg,遥控器- http://www.clasohlson.se/Archive/Images/Products/Hi/361183C_X_2007-06-27_162028_434.jpg。 - Kevin Dente
9个回答

5

你怎么认为这是一个CRC?通常,CRC不会用于如此小的数据块。

对我来说,这更像是某种奇偶校验、纠错码(实际上是FEC)或Reed-Solomon代码。可能是Hamming Code—— Hamming在工业和电信中被广泛使用。


3

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

猜测所有可能的CRC(或散列算法)看起来并不太乐观。只需查看此处

第三种可能性是反向工程您正在使用的代码以生成校验和。

祝你好运 :)


1
好的,如果校验和是4位,并且我们正在处理CRC,则很有可能是CRC-4。虽然多项式未知,但只有16种可能性,因此让蛮力破解尝试所有这些选项应该不会花费太长时间。 - Michael Madsen

2

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个。


0

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


0

你可以尝试一些常见的CRC方法,希望能够幸运地得到正确结果,但是Mana的答案(寻找规范)将是最好的选择。


0

一个好的校验算法的整个关键在于它与输入文本没有任何共同之处。你可以改变输入中的一个字符,整个校验输出都会改变。所以唯一的逆向方法就是猜测。如果你知道输入和输出字符串是什么,你可以尝试几种常见的校验算法,看看是否有任何一个给出正确的输出。除此之外,不可能。

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


0

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


0
从字符串的长度与校验和的长度来看,我认为这是一个简单的1错误纠正校验和。它可能是使用海明距离中的简单之一。我记不清它是如何工作的,而且我身边也没有任何信息理论/线性代数教科书。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接