Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Embedded 从CRC16和数据集逆向工程CRC16算法_Embedded_Reverse Engineering_Crc - Fatal编程技术网

Embedded 从CRC16和数据集逆向工程CRC16算法

Embedded 从CRC16和数据集逆向工程CRC16算法,embedded,reverse-engineering,crc,Embedded,Reverse Engineering,Crc,我使用的是一个缺乏文档记录的系统,其中我需要修改的结构中需要CRC16。 除非我提供正确的校验和,否则修改不会生效 技术支持人员表示他们使用的是标准CRC16,但使用CRC16 CCITT不会给出结果 我有一小段数据和它应该具有的校验和 有人能帮我找到适合我的数据集的CRC16参数(多项式、初始值)吗 还有一件事。在所讨论的平台上,每个地址都用16位字来组织地址,所以我尝试了原始字节顺序和反向字节顺序 Data Set # 1 crc 0xb19f data @b306: 7a

我使用的是一个缺乏文档记录的系统,其中我需要修改的结构中需要CRC16。 除非我提供正确的校验和,否则修改不会生效

技术支持人员表示他们使用的是标准CRC16,但使用CRC16 CCITT不会给出结果

我有一小段数据和它应该具有的校验和

有人能帮我找到适合我的数据集的CRC16参数(多项式、初始值)吗

还有一件事。在所讨论的平台上,每个地址都用16位字来组织地址,所以我尝试了原始字节顺序和反向字节顺序

Data Set #  1
crc         0xb19f
data @b306: 7a b1 74 44 9f 84 74 5b  
length      8 bytes

Data Set # 2
crc        0x447b
data @0036 00 43 e2 05 5b 03 00 02 00 16 00 00 00 00 00 00
           00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
           12 c0 00 00 00 07 f7 ff 3f e5 ff ff 3f ff 75 30
           3a 98 00 01 00 9d 00 0f 00 09 00 0a 00 00 00 00
           00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
           00 00 00 00 00 00 00 00 00 00 00 00 00 0a 80 0f
           47 44 09 6d 0a 35 09 c4 f0 00 00 40 10 00 00 01
           07 d0 27 10 00 00 ff 38 00 5a ff 06 0a fd 00 05
length     128 bytes
知道我现在知道的,我觉得当我选择了一个不提供太多技术支持的组织时,我选择的很糟糕,我现在知道了

[编辑:] 处理器约为8051,但不确定端度。当然,我的测试代码会测试这两种endianness类型

[编辑:] 我发现另一个问题很有帮助:

原来我得到了嵌入式芯片制造商的回复


在我看来,它不像是标准的CRC16,我对无法确定正在使用的CRC算法并不感到惊讶。

在您自己的答案中链接的代码似乎有很多不相关的代码,但16位CRC函数提到了两个多义词:

x^16+x^5+x^2+1.
x^16+x^12+x^5+1
但提到这些的评论表明,作者并没有意识到其中一个只是另一个的反向版本,这可能就是为什么对文档存在混淆的原因。无论哪种方式,它都是CRC-16-CCITT多项式(用于X.25、V.41、HDLC、XMODEM、蓝牙、SD等许多其他场合;称为CRC-CCITT)。当然,这并不是说它的实施是正确的,也不是说评论是正确的

它看起来像是来自多个源的不完整的代码集合。你不得不怀疑一个依赖未知来源和明显混乱的代码和算法的供应商

顺便提一下,同一代码中的32位CRC使用CRC-32多项式(如ISO 3309、ANSI X3.66、FIPS PUB 71、FED-STD-1003、ITU-T V.42、以太网、SATA、MPEG-2、Gzip、PKZIP、POSIX cksum、PNG、ZMODEM中所用)


稍后编辑: 我在这个网站上找到了它:经过大量的尝试和错误。不幸的是,该站点以ASCII格式获取数据,因此我使用将8字节的样本转换为文本(这会产生“
z±tDt[
”-注意,该字符串包含一些非打印字符,但从站点复制和粘贴这些字符似乎包括它们,因为它报告了8字节,而此处的字符串为6-不要从本文复制和粘贴)

生成数据示例中给出的结果的任何配置方式如下所示:

设置如下:

  • 点击CRC-CCITT
  • 将“初始值”设置为FFFF后,单击“转换!”(转换为“非直接”转换84CF的值)
  • 将“最终异或”设置为FFFF
  • 选中“反向数据字节”
  • 以ASCII输入数据
  • 单击“计算!”按钮

首先,CRC16与CRC16 CCITT不同-那么为什么您希望它能工作呢?其次,说中断的实现很常见,所以您可能希望找到一个或两个与您找到的任何正确实现产生不同结果的实现,并查看它们是否与您的产品使用的结果相匹配。第三,为什么要使用[c++]、[c]和[c]“嵌入式”标签?- 1不诚实地吸引观众!@托尼D,对C++和C标签感到抱歉,我删除了它们。至于嵌入式,这是一个诚实的,一个嵌入式平台,我不敢说出他们的名字,以免羞辱他们提供如此糟糕的支持。(虽然embedded可能是正确的,但表面上与所提出的问题无关),但如果他们在整个软件中广泛使用这种CRC方法,命名他们可能是获得实际经验和帮助的最实际的方式…@Bamaco Yup-我为你感到-丑陋的情况。可能最终不得不“社会工程师”不知何故,extact CRC代码/算法从中消失了……祝你好运!尝试将你的数据输入在线CRC计算器,如。如果你能将适当格式的数据剪切并粘贴到字段中,它将自动计算各种CRC算法。谢谢@Ross,我已编辑了无用的答案,并将其替换为实际答案。您的屏幕截图显示初始值为0x84CF,但下面的文本显示为0xFFFF。@Bamaco:按照步骤操作。我是通过选择CRC-CCITT到达84CF的,它将字段设置为FFFF,当转换为84CF时,该字段将变为FFFF。重点是指示值是如何到达的-这不是魔术!它可能不是最直观的界面,但它提供了比我找到的任何其他在线CRC工具都多的选项。要查看所有控件的实际功能,可以查看Java脚本,该站点有一个指向支持所有相同选项的C代码的链接。