2016-11-07 2 views
1

У меня есть протокол последовательной связи и есть некоторые проблемы с поиском алгоритма контрольной суммы, который был использован. Я пробовал несколько CRC16 algorithms, и никто из них, похоже, не работает.Выясните, какой алгоритм CRC16 был использован

сообщение выглядит следующим образом (в Hex):

55 13 04 03 09 f1 01 00 00 06 50 08 00 02 00 00 00 cc 1a 
55 13 04 03 09 f1 01 00 00 06 50 00 00 02 00 00 00 94 3b 
55 13 04 03 09 f1 02 00 00 06 50 08 00 02 00 00 00 7f e4 
55 13 04 03 09 f1 02 00 00 06 50 00 00 02 00 00 00 27 c5 
55 13 04 03 09 f1 03 00 00 06 50 08 00 02 00 00 00 ee b1 
55 13 04 03 09 f1 03 00 00 06 50 00 00 02 00 00 00 b6 90 

Я знаю, что стартовые байты 0x55 и вторые байты длина сообщения

В случае необходимости, я могу предоставить больше данных. Любая помощь или подсказка была бы оценена;)

С наилучшими пожеланиями, Амир

+0

Будет ли это хорошим вопросом для [security.SE]? – Cullub

ответ

0

Это зависит от того, какие байты ЦИК вычисляется по.

Вы можете использовать RevEng, чтобы попытаться извлечь параметры CRC из примеров. Из ваших примеров видно, что это 16-битный CRC с полиномом 0x1021 и что CRC отражается (полином реверсируется по битам при подаче на вход, а регистр CRC сдвинут вправо, а не влево) , Однако начальное значение и окончательное исключение - или зависит от того, какие байты вычисляется CRC. Чтобы действительно пригвозить их, вам также понадобятся примеры сообщений различной длины.

RevEng catalog of 16-bit CRCs имеет несколько стандартных ЗПК, что это может быть:

width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0x0000 check=0x6f91 name="CRC-16/MCRF4XX" 
width=16 poly=0x1021 init=0xb2aa refin=true refout=true xorout=0x0000 check=0x63d0 name="CRC-16/RIELLO" 
width=16 poly=0x1021 init=0x89ec refin=true refout=true xorout=0x0000 check=0x26b1 name="CRC-16/TMS37157" 
width=16 poly=0x1021 init=0xc6c6 refin=true refout=true xorout=0x0000 check=0xbf05 name="CRC-A" 
width=16 poly=0x1021 init=0x0000 refin=true refout=true xorout=0x0000 check=0x2189 name="KERMIT" 
width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e name="X-25" 

я не получаю какой-либо из тех, предполагая, что все это послание, ни, если я бросаю первые один или два байта.

Наиболее распространенными CRC из этого списка являются KERMIT (также известный как CCITT CRC-16) и X-25.

Смежные вопросы