Сейчас на форуме: tyns777, cppasm, dutyfree (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Вычисление контрольной суммы
Посл.ответ Сообщение

Ранг: 1.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 29 сентября 2017 17:58
· Личное сообщение · #1

Всем доброго дня!

Перенесите тему если не по адресу...

Ломаю закрытый протокол. Пытаюсь работать с устройством через COM порт. Работа, как обычно для COM представляет собой обмен последовательностями HEX байтов. Сами последовательности я проснифферил, тут проблем нет. Проблема в том, что не удаётся раскусить алгоритм рассчёта контрольной суммы, а без этого весь труд насмарку. Кое-какой систематизации удалось добиться методом раздумий и анализа, считай методом тыка. Может найдётся кто-то головастый в математике и сможет мне помочь? Что нужно предоставить для облегчения помощи?

Начну пожалуй так:

0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20

0x02 - начало сообщения (по идее отбрасывается)
Жирным выделил - 4 значащих байта(они изменяются, что, собственно, и влияет на значение контрольной суммы)
Последний байт 0x20- собственно искомая контрольная сумма(всегда 1 HEX byte).

Сейчас я пытаюсь двигаться так: вычисляю XOR8+некий коэффициент. По некоему наитию скорее решил что это сработает.

К примеру, для:

0x01-0x0f - коэффициент равен +0x10
0x10-1F = +0x30
0x20-2F = -0x30
30-3F = -0x10
И далее всё повторяется циклически(+10+30-30-10) вплоть до FF.


Дальше - хуже. Если к примеру заполнены 2 байта из 4, то коэффициент вычисляется по наибольшему значению. Таблица смещений продолжает работать, при условии что один из байтов не превышает 0x0f. Если превышает начинается другая чехарда и так далее.

Я понимаю что я не математик и поэтому делаю дурную работу. Может тут всё на самом деле просто? Убеждён, используется определённый алгоритм...



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 29 сентября 2017 18:07 · Поправил: kunix
· Личное сообщение · #2

20 00 - заголовок
30 - длина полезной нагрузки
<полезная нагрузка>
20 - контрольная сумма.
А чем плохо контрольная сумма, равная XOR всех байт полезной нагрузки?
Не пошло так?



Ранг: 1.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 29 сентября 2017 18:17
· Личное сообщение · #3

Уполз пробовать.



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 29 сентября 2017 18:23 · Поправил: kunix
· Личное сообщение · #4

Еще возможно так:
20 - заголовок
00 30 - длина полезной нагрузки, big endian число.
И в полезной нагрузке тоже все числа big endian.



Ранг: 1.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 29 сентября 2017 18:29
· Личное сообщение · #5

Пока что получается. Если всё срастётся с меня море пива...


 eXeL@B —› Вопросы новичков —› Вычисление контрольной суммы
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати