Обратная инженерная контрольная сумма из строки ascii?

В настоящее время я работаю над разработкой устройства, у которого есть последовательный протокол.

Я в основном там, однако я не могу понять одну часть строки.

Для каждой строки, возвращаемой машиной, всегда есть!XXXX, где XXXX изменяется в шестнадцатеричном значении. Из чего я могу найти это может быть CRC16?

Однако я не могу понять, как рассчитать CRC сам, чтобы подтвердить, что это правильно.

Вот пример из 3 ответов.

U;0;!1F1B
U;1;!0E92
U;2;!3C09

Число может быть заменено рядом символов ascii. Например, вот что я буду использовать чаще всего.

U;RYAN W;!FF0A

Как рассчитать, как генерируется контрольная сумма?

2 ответа

Решение

Вам нужно больше примеров различной длины.

С ревангом вы захотите обратить байт CRC, например, 1b1fне 1f1b, Похоже, что CRC рассчитывается по тому, что находится между точками с запятой. С местью я получаю, что полином 0x1021, который является очень распространенным 16-разрядным полиномом, и что CRC отражается.

% reveng -w 16 -s 301b1f 31920e 32093c 5259414e20570aff
width=16  poly=0x1021  init=0x1554  refin=true  refout=true  xorout=0x07f0  check=0xfa7e  name=(none)
width=16  poly=0x1021  init=0xe54b  refin=true  refout=true  xorout=0xffff  check=0xfa7e  name=(none)

С помощью большего количества примеров вы сможете определить начальное значение регистра CRC и то, с чем результат будет исключен или обработан.

Существует инструмент, позволяющий перепроектировать вычисления CRC: CRC RevEng http://reveng.sourceforge.net/

Вы можете дать ему шестнадцатеричные строки ввода и контрольную сумму и спросить, какой алгоритм CRC соответствует вводу. Вот входные данные для первых трех строк (при условии, что сообщения являются U; 0; U; 1; U;2;):

$ reveng -w 16 -s 553b303b1f1b 553b313b0e92 553b323b3c09 
width=16  poly=0xa097  init=0x63bc  refin=false  refout=false  xorout=0x0000  check=0x6327  residue=0x0000  name=(none)

Контрольная сумма следует за входными сообщениями. К сожалению, это не сработает, если я попробую сообщение RYAN W. Возможно, вы захотите попробовать отредактировать входные сообщения, чтобы увидеть, какая часть строки вводится в CRC.

Другие вопросы по тегам