首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解密校验和/CRC

解密校验和/CRC
EN

Stack Overflow用户
提问于 2017-11-28 21:01:31
回答 2查看 472关注 0票数 0

我正在尝试找出对以下数据流的错误检查。该数据来自用于对电热水器进行编程的商用遥控器。

我广泛地研究了大多数的IR协议(RC5,NEC等),从我可以看出它不适合任何协议。然而,我不能确认它不是IrDA。

我使用的硬件是一个标准的Vishay IR 38 the接收器,连接到运行WinLIRC的旧PC上,所以我可以看到原始的脉冲/空间序列,并通过各种测试/调整确认了配置中的基本参数(如时间戳,分辨率到秒),数据从IR出来为10位,一个起始位,8位数据字节和一个停止位。

我的一个症结是我认为是错误校验的最后一个字节,我之所以知道这一点,是因为我已经设置了一个测试装置来发送具有不同错误校验的数据,而加热器不接受它,并且使用记录的正确值被接受。

下面是数据流,然后是两次迭代,但每种情况的时间戳都提前了1秒。我可以看到错误校验之间在数学上的一些相似之处,但我已经尝试了所有8位CRC/校验和XOR,加,减等解码方法,也使用了reveng,但没有产生答案。

这方面的任何帮助都是非常感谢的!

第一轮数据

二进制十六进制十进制纸币

11111111 FF 255

00000000 0 0

00001111 F 15

10110011 B3 179

01001100 4C 76

00000000 0 0

00000000 0 0

00000000 0 0

00000011 3 3

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000011 3 3

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000011 3 3

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000011 3 3

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000011 3 3

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000011 3 3

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000000 0 0

00000011 3 3

00000000 0 0

00000000 0 0

00000011 3 3

00000010 2小时

00010010 12 18分钟

00000000 0 0秒

01101011 6B107 CRC校验?

第二轮数据与第一轮相同,直到时间戳秒数:-

00000001 11秒

00110101 35 53 CRC校验?

第3轮数据与第1轮相同,直到时间戳秒:-

00000010 2秒11010111 D7 215CRC校验?

第4轮数据与第1轮相同,直到时间戳秒数:-

00000011 33秒

10001001 89 137 CRC校验?

第5轮数据与第1轮相同,直到时间戳秒:-

00000100 4 4秒

00001010 A 10 CRC校验?

第6轮数据与第一轮相同,直到时间戳秒:-

00000101 5 5秒

01010100 54 84 CRC校验?

第7轮数据与第一轮相同,直到时间戳分钟:-

00011000 18 24分钟

00001101 D 13秒

01110001 71113 CRC校验?

第8轮数据与第一轮相同,直到时间戳分钟:-

00011011 1B 27分钟

00111011 3B 59秒

01000111 47 71 CRC校验?

EN

回答 2

Stack Overflow用户

发布于 2017-12-02 00:22:58

CRC RevEng可以很容易地找到原始问题集的解决方案。这是一个紧凑的Bash命令行:-

代码语言:javascript
运行
复制
reveng -w 8 -s ff000fb34c00000003000000000003000000000003000000000003000000\
00000300000000000300000000000300000302\
{12006b,120135,1202d7,120389,12040a,120554,180d71,1b3b47}

它返回:-

代码语言:javascript
运行
复制
width=8  poly=0x31  init=0xa5  refin=true  refout=true  xorout=0x00  check=0x67  residue=0x00  name=(none)

由于所有流的长度相同,CRC RevEng不能同时计算初始化和异或输出。xorout=0x00是一种猜测,它迫使init=0xa5正确地计算问题集中的流。长度不是52个字节的流需要这两个参数,找到一个参数就可以计算它们。

poly=0x31CRC-8/MAXIM下的目录中只出现一次,这也会反映出来,但有init=0x00;如果这确实是正在使用的算法,那么init=0xa5就是一个不应该出现在算法中的字节图像(即前n个字符不会出现在CRC-8/MAXIM中);不幸的是,我找不到任何与初始值0xa5相等的数据流前缀。

如果您需要代码来计算这些CRC,可以使用其他软件包将CRC RevEng输出的Rocksoft™模型转换为C语言,例如pycrc或Mark Adler的CRC。

票数 1
EN

Stack Overflow用户

发布于 2017-12-02 03:19:01

谢谢,谢谢!你做到了!太棒了!我又试了一次复仇,但仍然什么也得不到,甚至抄袭了你的例子。所以我在这个网站上试了一下:

http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

包括最后一个字节,还有你找到的poly和init和bingo!

我的数据流总是相同的大小,52字节。

再次,非常感谢所有帮助我格式化等的人,当然还有答案!

AaronT。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47532262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档