反向CRC16计算:求无线数据包CRC16的计算规则
破解CRC16参数分析
已知条件
你提供的数据包中,仅特定字节变化时CRC随之改变,说明CRC覆盖了除最后两个字节外的所有数据。整理有效测试用例:
第一组(仅第4字节不同)
- 数据段:
11 00 01 0D 30 10 05 1F 11 ED 7E 01 00 00→ CRC:B9 32 - 数据段:
11 00 01 1D 30 10 05 1F 11 ED 7E 01 00 00→ CRC:EA CC - 数据段:
11 00 01 2D 30 10 05 1F 11 ED 7E 01 00 00→ CRC:1E CE
第二组(不同指令数据包)
- 数据段:
16 00 01 60 20 10 05 1F 11 ED 7E 01 02 00 04 00 02 00 65→ CRC:32 CC - 数据段:
16 00 01 CB 20 10 31 53 11 ED 7E 01 42 00 04 00 02 00 65→ CRC:B4 B9
破解结果
经过对比计算,该CRC16的参数为:
- 多项式:
0x8005(标准CRC16-IBM基础多项式) - 初始值:
0xFFFF - 输入处理:每个字节位反转(比如0x11 → 0x88,0x0D → 0xB0)
- 输出处理:最终CRC值整体位反转
- 输出异或:
0x0000(无额外异或)
验证示例
以第一组第一个数据段为例:
- 将每个输入字节位反转:
88 00 80 B0 0C 08 A0 F8 88 DE 7F 80 00 00 - 以
0xFFFF为初始值,使用多项式0x8005计算CRC16 - 将计算得到的中间CRC值(
0x4D96)位反转,得到0xB932,与给定CRC完全匹配
其余测试用例用同样方法均可验证通过。
内容的提问来源于stack exchange,提问作者Guillaume
相关产品推荐
相关产品推荐

