【问题标题】:How could I guess a checksum algorithm?我怎么能猜到校验和算法?
【发布时间】:2010-09-22 20:26:47
【问题描述】:

如果给定代码 + 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:找到我认为最好的解决方案的规范,但由于这不是选项,我需要以某种方式强制校验和计算。

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

【问题讨论】:

标签: checksum crc


【解决方案1】:

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

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

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

祝你好运:)

【讨论】:

  • 好吧,如果校验和是 4 位,并且我们正在处理 CRC,那么它很可能是 CRC-4。多项式是未知的,但无论如何只有 16 种可能性,因此让暴力破解者尝试所有可能性应该不会花很长时间。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:
                ['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-05-13
                  • 1970-01-01
                  • 2021-05-11
                  • 2011-02-23
                  • 1970-01-01
                  • 2020-07-08
                  • 2015-03-12
                  • 1970-01-01
                  相关资源
                  最近更新 更多