Найти алгоритм, который генерирует контрольную сумму - PullRequest
1 голос
/ 24 мая 2010

У меня есть чувствительное устройство, которое передает 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 голосов
/ 24 мая 2010

Некоторые случайные идеи:

  1. Порядок следования битов: вы в настоящее время представляете данные в виде октетов, но это не так, как их видит алгоритм CRC.CRC работают с полиномами, представленными в виде массивов битов, а не массивов октетов.Из-за этого, возможно, что устройство выполняет CRC с использованием другой схемы упорядочения битов, чем та, которую вы используете.
  2. В зависимости от устройства, я бы сказал, что вполне вероятно, что счетчик включен вРасчет CRC.
  3. Если это встроенное устройство, возможно, используется другой код, например, BCH.

Есть ли какая-либо другая информация, которая может быть предоставлена ​​об устройствеобсуждаемый?

Это может дать некоторое представление о том, насколько сильное кодирование использовалось.Например, определенный CRC-12 (0x8F8) обеспечивает расстояние Хэмминга от 5 до длины слова данных 53 бита (в ваших данных слово данных может быть 52 бита, принимая размер CRC 12 битов).

Редактировать: См. Ответ в Как я могу угадать алгоритм контрольной суммы? для некоторых дополнительных идей.

...