假设我有一些带有16位校验和的数据包。我想猜测使用了哪种校验算法。
首先,从转储数据中,我可以看到数据包有效载荷中的一个字节更改会完全更改校验和,因此我可以假设它不是某种简单的XOR或求和。
然后我尝试了几个CRC16的变体,但没有太多运气。
这个问题可能更倾向于密码学,但我真的很感兴趣找出任何易于理解的统计工具来找出这可能是哪个CRC。如果其他方法都失败了,我甚至可能会绘制不同的CRC算法。
背景故事:我有一个带有某种校验和的串行RFID协议。我可以重放消息而不会出现问题,并且解释结果(不进行校验和检查),但是我无法发送修改后的数据包,因为设备会将其丢弃。
使用现有软件,我可以更改RFID芯片的有效载荷。但是,唯一的序列号是不可变的,因此我无法检查每个可能的组合。虽然我可以生成逐一递增的值的转储,但这对于此问题不适用。 数据转储文件可用,如果问题本身不够,请参考它们。
首先,从转储数据中,我可以看到数据包有效载荷中的一个字节更改会完全更改校验和,因此我可以假设它不是某种简单的XOR或求和。
然后我尝试了几个CRC16的变体,但没有太多运气。
这个问题可能更倾向于密码学,但我真的很感兴趣找出任何易于理解的统计工具来找出这可能是哪个CRC。如果其他方法都失败了,我甚至可能会绘制不同的CRC算法。
背景故事:我有一个带有某种校验和的串行RFID协议。我可以重放消息而不会出现问题,并且解释结果(不进行校验和检查),但是我无法发送修改后的数据包,因为设备会将其丢弃。
使用现有软件,我可以更改RFID芯片的有效载荷。但是,唯一的序列号是不可变的,因此我无法检查每个可能的组合。虽然我可以生成逐一递增的值的转储,但这对于此问题不适用。 数据转储文件可用,如果问题本身不够,请参考它们。
需要参考文档吗? 一个无痛的指南:CRC错误检测算法 是我在这里提问后发现的很好的参考资料。
最终,在接受的答案中得到非常有帮助的提示,即它是CCITT时,我使用了此CRC计算器,并将生成的校验和与已知的校验和进行异或运算,得到0xffff,从而得出结论,最终的xor为0xffff而不是CCITT的0x0000。