逆向工程得到 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 多项式的主要内容,如果未能解决你的问题,请参考以下文章