当前位置:  开发笔记 > 人工智能 > 正文

我怎么能猜出校验和算法?

如何解决《我怎么能猜出校验和算法?》经验,为你挑选了1个好方法。

我们假设我有一些最后有16位校验和的数据包.我想猜猜使用了哪种校验和算法.

首先,根据转储数据,我可以看到数据包有效载荷中的一个字节更改完全改变了校验和,因此我可以假设它不是某种简单的XOR或总和.

然后我尝试了CRC16的几种变体,但没有太多运气.

这个问题可能更倾向于加密,但我真的对任何易于理解的统计工具感兴趣,以找出这可能是哪个CRC.如果其他一切都失败了,我甚至可能会转向绘制不同的CRC算法.

Backgroud故事:我有串行RFID协议,带有某种校验和.我可以毫无问题地重播消息,并解释结果(没有校验和检查),但我无法发送修改后的数据包,因为设备将它们丢弃在地板上.

使用现有的软件,我可以改变RFID芯片的有效载荷.但是,唯一的序列号是不可变的,因此我无法检查每个可能的组合.虽然我可以生成递增1的值的转储,但不足以使详尽的搜索适用于此问题.

如果问题本身不够,可以使用包含数据的转储文件 :-)

需要参考文献? CRC错误检测算法的无意义指南是我在这里提问之后找到的很好的参考.

最后,在接受了答案的非常有用的提示之后,我 使用了这个CRC计算器,并使用已知校验和的xored生成校验和得到0xffff,这使我得出结论,最终xor是CCITT的0x0000的0xffff instread.



1> selwyn..:

CRC需要考虑许多变量:

Polynomial
No of bits (16 or 32)
Normal (LSB first) or Reverse (MSB first)
Initial value
How the final value is manipulated (e.g. subtracted from 0xffff), or is a constant value

典型的CRC:

LRC:    Polynomial=0x81; 8 bits; Normal; Initial=0; Final=as calculated
CRC16:  Polynomial=0xa001; 16 bits; Normal; Initial=0; Final=as calculated
CCITT:  Polynomial=0x1021; 16 bits; reverse; Initial=0xffff; Final=0x1d0f
Xmodem: Polynomial=0x1021; 16 bits; reverse; Initial=0; Final=0x1d0f
CRC32:  Polynomial=0xebd88320; 32 bits; Normal; Initial=0xffffffff; Final=inverted value
ZIP32:  Polynomial=0x04c11db7; 32 bits; Normal; Initial=0xffffffff; Final=as calculated

首先要做的是通过改变最后一个字节来获取一些样本.这将帮助您计算出CRC中的字节数.

这是一种"自制"算法.在这种情况下,可能需要一些时间.否则尝试标准算法.

尝试更改最后一个字节的msb或lsb,并查看它如何更改CRC.这将指示方向.

为了使其更加困难,有些实现操纵CRC以使其不会影响通信介质(协议).

根据您对RFID的评论,这意味着CRC与通信相关.通常CRC16用于通信,但CCITT也用于某些系统.

另一方面,如果这是UHF RFID标签,那么有一些CRC方案 - 一个5位和一些16位.这些记录在ISO标准和IPX数据表中.

IPX:  Polynomial=0x8005; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6B: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6C: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
    Data must be padded with zeroes to make a multiple of 8 bits
ISO CRC5: Polynomial=custom; 5 bits; Reverse; Initial=0x9; Final=shifted left by 3 bits
    Data must be padded with zeroes to make a multiple of 8 bits
EPC class 1: Polynomial=custom 0x1021; 16 bits; Reverse; Initial=0xffff; Final=post processing of 16 zero bits

这是你的答案!!!!

在完成日志后,CRC就是CCITT了.第一个字节0xd6从CRC中排除.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有