|
Деление в алгоритме CRC |
|
|
|
Sep 7 2012, 11:59
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
Итак дано: CRC-5 x^5+x^2+1 Исходные данные: 0xD1 Из определения, CRC есть остаток от деления данных на полином. Значит CRC = 0xD1 % (x^5+x^2+1) Делю в столбик CODE 11010001 100101 -------- 100010 100101 ------------ 1111 остаток 1111 = 0xF Проверяю онлайн калькулятором http://ghsi.de/CRC/index.php?Polynom=100101&Message=B1ответ 0x16 (hexadecimal) 10110 (binary) В чем ошибка ? В онлайн калькуляторе судя по приведенным ими листингам кода начальное значение CRC равно 0
|
|
|
|
|
Sep 7 2012, 12:19
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(Костян @ Sep 7 2012, 15:59)  Итак дано: CRC-5 x^5+x^2+1 Исходные данные: 0xB1 Делю в столбик Код 11010001 100101 -------- 100010 100101 ------------ 1111 В чем ошибка ? 0xB1 = 10110001, а у Вас делимое: 0xD1 = 11010001
|
|
|
|
|
Sep 7 2012, 13:10
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Костян @ Sep 7 2012, 14:59)  В чем ошибка ? В том, что деление полиномов и деление чисел - несколько разные операции. Деление чисел выполняется сдвигом и вычитанием, деление полиномов - сдвигом и вычитанием по модулю 2, которое идентично сложению по модулю 2 (оно же "Исключающее ИЛИ", XOR). Поэтому формула CRC = 0xD1 % (x^5+x^2+1) не верна. Это первое. Второе: перед делением полиномов делимое сдвигается влево на кол-во разрядов делителя. И тогда все сходится: CODE 11010001000000 100101 -------- 100010 100101 111100 100101 110010 100101 101110 100101 10110
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 7 2012, 13:51
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
QUOTE Поэтому формула CRC = 0xD1 % (x^5+x^2+1) не верна. Это первое. согласен QUOTE (Сергей Борщ @ Sep 7 2012, 11:10)  Второе: перед делением полиномов делимое сдвигается влево на кол-во разрядов делителя. Спасибо, разобрался  . Только сдвиг идет не на кол-во разрядов делителя, а на степень полинома, что меньше на 1 сдвиг. В Вашем делении в столбик последний 0 лишний. И этот сдвиг идет только при вычислении CRC. Классическая схема деления полиномов не предполагает сдвига, если я все правильно понимаю.
|
|
|
|
|
Sep 7 2012, 14:38
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
QUOTE (MrYuran @ Sep 7 2012, 12:07)  На самом деле это называется умножением в поле Галуа  А вычисляется сдвигом и сложением по модулю 2 (XOR) не совсем. Операция нахождения CRC - есть деление на многочлен в поле Галуа. Откуда взялось умножение то ? А при кодирование и декодировании выполняется только операция деления (при кодировании находится остаток от деления, при декодировании идет проверка, что остаток равен нулю)
|
|
|
|
|
Sep 7 2012, 14:54
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Костян @ Sep 7 2012, 18:38)  не совсем. Операция нахождения CRC - есть деление на многочлен в поле Галуа. Откуда взялось умножение то ? А при кодирование и декодировании выполняется только операция деления (при кодировании находится остаток от деления, при декодировании идет проверка, что остаток равен нулю) Ну это смотря с какой стороны зайти. Ну да ладно, пусть будет деление. А я попутно интересную статью нагуглил, очень может пригодиться.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Sep 10 2012, 07:32
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
QUOTE (MrYuran @ Sep 7 2012, 12:54)  А я попутно интересную статью нагуглил, очень может пригодиться. это обшеизвестно, что crc не противостоит взлому, достаточно только ход байтов переставить и получим тот же CRC
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|