我怎么猜一个校验和算法?

问题描述 投票:5回答:9

如果给出了给定的代码+ CRC字符串,有人知道如何找出CRC算法吗?

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

0010101000011101 + 00000010101000011111 + 00011000110011101101 + 00010000000000000100 + 00100011100011001110 + 00111000110011101110 + 01000001011110101100 + 01000010101000011110 + 01010011100011001101 + 01100001011110101111 + 01110011100011001100 + 10010011100011001111 + 10100001011110101101 + 10110000000000001000 + 10110000111100001101 + 11000000000000001100 + 11001111111111111111 + 11011000110011101111 + 11011000110011101100 + 11100001011110101110 + 11101111111100001101 + 11100010101000011100 + 1111

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

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

有人可以帮忙吗?

更新:

RE:找到规范,我也认为这将是最好的解决方案,但是由于这不是我的选择,因此我需要以某种方式蛮力检查校验和。

这是问题,我没有规格,我无法在任何地方找到它们。我尝试了几种不同的校验和计算方法,但都没有结果,没有办法比较输入字符串以找出它们的共同点,并以此方式获得算法。

checksum crc
9个回答
5
投票

什么使您认为它是CRC?通常,CRC不用于如此小的数据。

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


3
投票

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

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

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

祝你好运:)


2
投票

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


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
投票

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

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

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

0
投票
根据字符串的长度与校验和的长度来判断,我会说这是一个简单的一错误校正校验和。它可能是使用汉明距离的简单方法之一。我不记得它是如何工作的,我身上也没有任何信息论/线性代数教科书。
© www.soinside.com 2019 - 2024. All rights reserved.