逆向工程得到 CRC16 多项式

Posted

技术标签:

【中文标题】逆向工程得到 CRC16 多项式【英文标题】:Reverse engineering to get CRC16 Polynomial 【发布时间】:2015-06-23 05:27:12 【问题描述】:

我正在尝试找到一种使用基值和 CRC16 输出计算 CRC16 多项式的有效方法。 一个更清楚的例子:

y = CRC16(x)

如何找到 CRC16 函数用来计算 y 的多项式? 我正在使用 C 和 Python 创建一些可执行文件(用于测试目的)。

【问题讨论】:

我会从最简单的输入开始,一个空字符串或一个由单个零字节组成的字符串。 对于同时设置了高位和低位的 17 位数字,只有 32K 可能的值。为什么要提高效率? 您是说您可以访问函数CRC16(),并且您想重新实现该函数吗?如果是这样,请提供该函数返回的九个字节(ASCII)的CRC:“123456789”。 我有 2 个字节是 CRC16 函数的输出,然后我有原始数据。我试图了解 CRC 函数使用哪种多项式从该特定原始数据开始获取特定的 2 个字节。 【参考方案1】:

CRC 校验的多项式列表可以在这里找到:

http://en.wikipedia.org/wiki/Polynomial_representations_of_cyclic_redundancy_checks

特别是,您可能需要多项式 CRC-16-ANSI

【讨论】:

我认为 CRC-16-CCITT 用得更多,CCITT:Comité Consultatif International Téléphonique et Télégraphique 国际电报电话咨询委员会,现为 ITU-T【参考方案2】:

Lammert Bies 有一个出色的 page,其中包含用于 CRC-16 不同方法的参考和 C 库。

主要是,它包含一个在线计算器,您可以使用它立即查看您想要的是否是众所周知的方法之一。

如果是这样,C 库会立即提供 CRC 计算器的优化实现,并且可以很容易地用 Python 进行翻译。您将在我的 other answer 中找到 CRC-CCITT XMODEM 变体的示例

【讨论】:

我知道这与仅链接的答案相距不远,但我真的不知道如何以不同的方式做到这一点:第一个链接 必须 是一个链接,因为它是在线计算器,第二个只是前面解释的一个例子。

以上是关于逆向工程得到 CRC16 多项式的主要内容,如果未能解决你的问题,请参考以下文章

关于CRC基础的几个问题

CRC-16 与 0xA001 多项式

CRC8,CRC16,CRC32校验不可靠的概率有多高

基于Qt的CRC16校验实现(查表法)

如何用多项式 x16 + x12 + x5 + 1 计算 CRC 16

问一下计算机大神。crc16与crc32有啥区别