找到生成校验和的算法

时间:2010-05-24 11:54:42

标签: crc

我有一个传感设备,它传输一个6字节的消息和一个1字节的计数器,据说是一个校验和。

数据看起来像这样:

------DATA----------- -Counter- --Checksum?--

55 FF 00 00 EC FF ---- 60---------- 1F

计数器中的最后四位始终设置为0,即可能不使用这些位。假设最后一个字节是校验和,因为它具有非常特殊的性质。随着数据的变化,它往往会随机变化。

现在我需要的是找到基于--DATA--计算此校验和的算法。 我所尝试的是所有可能的CRC-8多项式,对于每个多项式我试图反映数据,切换它,用非零等启动它。我得出的结论是我没有处理正常的crc-算法。我也尝试了一些没有成功的flether和adler方法,xor来回的东西,但我仍然不知道如何生成校验和。

我最关心的是,计数器是如何使用的???相同的数据但具有不同的计数器值会产生不同的校验和。 我试图将计数器包含在我的计算中,但没有任何运气。

以下是一些其他数据示例:

55 FF 00 00 F0 FF A0 38  
66 0B EA FF BF FF C0 CA  
5E 18 EA FF B7 FF 60 BD  
F6 30 16 00 FC FE 10 81  

值得一提的另一件事是数据中的最后一个字节只取值FF或FE

如果您有任何提示或技巧,我可以尝试在这里发布,我真的很绝望。

由于

1 个答案:

答案 0 :(得分:0)

一些随意的想法:

  1. 比特排序:您当前将数据表示为八位字节,但这不是CRC算法所看到的。 CRC对多项式进行操作,这些多项式表示为位数组,而不是八位字节数组。因此,设备可能使用与您使用的不同的比特排序方案来执行CRC。
  2. 根据设备的不同,我会说计数器很可能包含在CRC计算中。
  3. 如果这是嵌入式设备,可能会使用其他一些代码,例如BCH。
  4. 是否可以提供有关相关设备的其他信息?

    这可能会给出一些关于如何使用强编码的指示。例如,某些CRC-12(0x8F8)提供的汉明距离为5到数据字长度为53位(在数据中,数据字可以是52位,假设CRC大小为12位)。

    修改 请参阅How could I guess a checksum algorithm?中的答案,了解其他一些想法。