реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Нахождение полинома CRC, Нахождение полинома CRC
uk8adi
сообщение Oct 13 2006, 05:47
Сообщение #16





Группа: Новичок
Сообщений: 14
Регистрация: 10-04-06
Пользователь №: 15 982



Доброе утро.
По поводу единичек в каждом разряде. До устройства пока не добрался, но проверил на стандартном полиноме CRC16CCITT 1021hex. Вот данные:

двоичные данные.......HEX.......CRC..............Разность:
(2 байта)................................p1021.......XOR.....алгебраическая

0000000000000000......0000......1D0F
0000000000000001......0001......0D2E......1021......0FE1
0000000000000010......0002......3D4D......2042......DFC2
0000000000000100......0004......5D8B......3063......BF84
0000000000001000......0008......9C07......8108......8108
0000000000010000......0010......0F3E......1231......0DD1
0000000000100000......0020......396D......2462......E3A2
0000000001000000......0040......55CB......48C4......C744
0000000010000000......0080......8C87......9188......9088
0000000100000000......0100......2E3E......3331......EED1
0000001000000000......0200......7B6D......6662......A1A2
0000010000000000......0400......D1CB......CCC4......4B44
0000100000000000......0800......94A6......89A9......8869
0001000000000000......1000......1E7C......0373......FE93
0010000000000000......2000......1BE9......06E6......0126
0100000000000000......4000......10C3......0DCC......0C4C
1000000000000000......8000......0697......1B98......1678

Как я правильно понял, CRC для данных 0003hex будет сумма разностей для нулевого и первого бита.

Правильное CRC, расчитанное программой для данных 0003hex будет 2D6Chex.
По варианту, предложенному Вами, CRC будет 3063hex, при сложении XOR, и EFA3hex при алгебраическом.

Извеняюсь за первое сообщение, не проследил за табуляцией.

Сообщение отредактировал uk8adi - Oct 13 2006, 06:14
Go to the top of the page
 
+Quote Post
uk8adi
сообщение Oct 13 2006, 06:39
Сообщение #17





Группа: Новичок
Сообщений: 14
Регистрация: 10-04-06
Пользователь №: 15 982



Цитата(Сергей Борщ @ Oct 12 2006, 18:37) *
Цитата(uk8adi @ Oct 12 2006, 16:14) *

Кто знает разработчиков того устройства, они могли применить и нестандартный полином, и может быть что-нибудь еще.
Лично я применяю начальное значение CRC отличное от нуля. Попробуйте просчитать свою нулевую посылку по стандартным полиномам с начальным значением отличным от нуля.

Еще у Скляра в "Цифровой связи" на стр. 933 описан метод взлома системы шифрования на регистре с обратными связями - оно не поможет?


Как я понял, вычислить начальное значение (init по описанию CRC) для нулевой посылки и после применять ее для дальнейшего расчета других данных.
Это было сделано, и расчитанные CRC отличались от принятых, причем довольно сильно и без видимой мною системы.
Go to the top of the page
 
+Quote Post
uk8adi
сообщение Oct 13 2006, 06:51
Сообщение #18





Группа: Новичок
Сообщений: 14
Регистрация: 10-04-06
Пользователь №: 15 982



Цитата(Epikur @ Oct 13 2006, 02:45) *
Попробуйте полином D027 в комбинации со стартовым значением. Какое пока сказать не знаю.
Предлагаю попробовать прогнать комбинацию FFFF00000000


Подсчитано с полиномом D027 и стартовым значением FFFF00000000 (стандартное для CRC16 CCITT):
.............................принятые...расчитанные
........................................CRC
303333333330..........6B3D..........EB11
303333333331..........BB16..........FB36
303333333332..........1B43..........CB5F
303333333333..........CB68..........DB78
303333333334..........8BC1..........AB8D
303333333335..........5BEA..........BBAA
Go to the top of the page
 
+Quote Post
Epikur
сообщение Oct 13 2006, 07:17
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



>> Подсчитано с полиномом D027 и стартовым значением FFFF00000000
Не, я имею ввиду, прогнать эту комбинацию по полиному.
А какое стартовое значение нам поможет определить единичка со всеми нулями.
Вообще, есть есть такая возможность, то стоит прогнать комбинацию XXXX00000000 со всеми возможными значениями XXXX и посмотреть, какая посылка даст нулевую сумму. Это XXXX и будет стартовым значением.
Go to the top of the page
 
+Quote Post
Fast
сообщение Oct 13 2006, 09:06
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



uk8adi, Неверно

1. я говорил, что от всех частных CRCi надо было отнять CRC0, конечно по модулю
тут я что-то уже запутался, т.к. было это дело давно,
но что надо от чего-то отнять CRC0, помню точно
наверное, от конечного результата

2. Пусть
smile.gif - сложение по модулю
sad.gif - вычитание по модулю

CRC для данных 0003hex будет равно
CRC1 smile.gif CRC2 sad.gif CRC0
или
0D2E smile.gif 3D4D sad.gif 1D0F = 2D6C

3. чтобы найти правильный полином, надо для каждого полинома CRC-16 (и все-таки найти их все)
получить XOR -разницу с нашими частными CRCi
если это будет величина постоянная, то полином мы угадали
останется только найти предустановку регистра
Go to the top of the page
 
+Quote Post
uk8adi
сообщение Oct 13 2006, 09:42
Сообщение #21





Группа: Новичок
Сообщений: 14
Регистрация: 10-04-06
Пользователь №: 15 982



Цитата(Fast @ Oct 13 2006, 14:06) *
2. Пусть
smile.gif - сложение по модулю
sad.gif - вычитание по модулю

CRC для данных 0003hex будет равно
CRC1 smile.gif CRC2 sad.gif CRC0
или
0D2E smile.gif 3D4D sad.gif 1D0F = 2D6C


Работает! Проверил на стандартном полиноме. Сейчас пойду к железке и наработаю таблицу.
Сообщу о результатах.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 13 2006, 12:25
Сообщение #22


Гуру
******

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



Цитата(uk8adi @ Oct 13 2006, 12:42) *
Цитата(Fast @ Oct 13 2006, 14:06) *


2. Пусть
smile.gif - сложение по модулю
sad.gif - вычитание по модулю

CRC для данных 0003hex будет равно
CRC1 smile.gif CRC2 sad.gif CRC0
или
0D2E smile.gif 3D4D sad.gif 1D0F = 2D6C


Работает! Проверил на стандартном полиноме. Сейчас пойду к железке и наработаю таблицу.
Сообщу о результатах.
Если не получится попробуйте еще полином 0x8408 (CRC-XMODEM) вкупе со сдвигом в другую сторону


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
uk8adi
сообщение Oct 16 2006, 12:27
Сообщение #23





Группа: Новичок
Сообщений: 14
Регистрация: 10-04-06
Пользователь №: 15 982



Что и куда двигаем. Не понятно. Пожалуйста, поподробнее.

Сообщение отредактировал uk8adi - Oct 16 2006, 12:31
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 16 2006, 14:36
Сообщение #24


Гуру
******

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



Цитата(uk8adi @ Oct 16 2006, 15:27) *
Что и куда двигаем. Не понятно. Пожалуйста, поподробнее.
Меняется порядок обработки битов. Можно я на примере?
Код
//==============================================================//
//          Calculate one byte of CCITT CRC-16                  //
//==============================================================//
void CRC_CRC16 (uint8_t Data, uint16_t &CRC) {
    CRC ^= (uint16_t)(Data) << 8;
    uint8_t i = 8;
    do {
        if (CRC & 0x8000) { CRC <<= 1; CRC ^= 0x1021; }
        else CRC <<= 1;
    }while(--i);
}
//==============================================================//
//          Calculate one byte of XModem CRC                    //
//==============================================================//
void CRC_XMODEM (uint8_t Data, uint16_t &CRC) {
    CRC ^= Data;
    uint8_t i = 8;
    do {
        if (CRC & 0x01) { CRC >>= 1; CRC ^= 0x8408; }
        else CRC >>= 1;
    } while(--i);
}


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
uk8adi
сообщение Oct 17 2006, 11:08
Сообщение #25





Группа: Новичок
Сообщений: 14
Регистрация: 10-04-06
Пользователь №: 15 982



Господа!
Сделал эту таблицу, с одной единичкой в каждом бите.
Работает все прекрасно!

ВСЕМ СПАСИБО!


Но как всетаки вытащить образующий полином, я не понял.
Go to the top of the page
 
+Quote Post
Fast
сообщение Oct 17 2006, 15:14
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



Цитата(uk8adi @ Oct 17 2006, 15:08) *
Но как всетаки вытащить образующий полином, я не понял.
ну.. это волшебство..

возможно
это устройство так же табличным методом формирует циклическую проверку.
конечно, какой-то полином изначально используется для построения таблицы,
но в таблице могут быть переставлены строки (т.е. переставлены частные CRCi для каждой единички),

поэтому опубликуйте полученную таблицу,
может кто-нибудь Вам скажет полином
его найти вполне возможно: нужно сгенерировать для всех известных полиномов CRC-16 такие же таблички с единицами и попытаться найти закономерность
Go to the top of the page
 
+Quote Post
DuHast
сообщение Oct 17 2006, 18:09
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Цитата(Fast @ Oct 17 2006, 19:14) *
Цитата(uk8adi @ Oct 17 2006, 15:08) *
Но как всетаки вытащить образующий полином, я не понял.
ну.. это волшебство..



Колеги, поправте меня, если я не прав. О полиноме можно говорить только тогда, когда испльзуется именнто циклический блочный код, а в данном случае имеет место какой-то другой блочный код, задаваемый порождающей матрицей.

Сообщение отредактировал DuHast - Oct 17 2006, 18:10
Go to the top of the page
 
+Quote Post
Fast
сообщение Oct 18 2006, 08:25
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



Цитата(DuHast @ Oct 17 2006, 22:09) *
Колеги, поправте меня, если я не прав. О полиноме можно говорить только тогда, когда испльзуется именнто циклический блочный код, а в данном случае имеет место какой-то другой блочный код, задаваемый порождающей матрицей.
Вы правы,
но очень часто для построения порождающей матрицы систематических кодов используется циклический полином. Дабы не изобретать долго и нудно велосипед.

Потом производится хитрая перестановка и сложение строк матрицы (линейная комбинация строк). Обычно это делается для придания коду нужных спектральных характеристик, когда какие-то кодовые слова (КС) передаются чаще других.
Go to the top of the page
 
+Quote Post
DuHast
сообщение Oct 18 2006, 18:44
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Цитата(Fast @ Oct 18 2006, 12:25) *
часто для построения порождающей матрицы систематических кодов используется циклический полином. Дабы не изобретать долго и нудно велосипед.

Это понятно, существует алгоритм при помощи которого из полинома циклического кода получают соответствующую пораждающую матрицу того же кода. Причём в нижней строке этой матрицы будет пораждаю многочлен.

А вот
Цитата
хитрая перестановка и сложение строк матрицы (линейная комбинация строк).

приведёт только к получению матрицы(не пораждающей) в строках которой будут кодовые слова того же кода, но никак не пораждающая матрица другого кода. Похоже Вы ошибаетесь, или я Вас не так понял.

Сообщение отредактировал DuHast - Oct 18 2006, 18:44
Go to the top of the page
 
+Quote Post
uk8adi
сообщение Oct 19 2006, 06:32
Сообщение #30





Группа: Новичок
Сообщений: 14
Регистрация: 10-04-06
Пользователь №: 15 982



Добрый день.

Снятая и частично вычисленная таблица:

000000000000...........0003
000000000001...........D028
000000000002...........707D
000000000004...........E0FF
000000000008...........11D0
000000000010...........23A6
000000000020...........474A
000000000040...........8E92
000000000080...........CD09
000000000100...........4A3C
000000000200...........947E
000000000400...........F8D1
000000000800...........218C
000000001000...........431E
000000002000...........863A
000000004000...........DC59
000000008000...........689C
000000010000...........D13E
000000020000...........7251
000000040000...........E4A7
000000080000...........1960
000000100000...........32C6
000000200000...........658A
000000400000...........CB12
000000800000...........4609
000001000000...........8С17
000002000000...........С800
000004000000...........402D
000008000000...........805F
000010000000...........D090
000020000000...........710D
000040000000...........E21F
000080000000...........1410
000100000000...........2826
000200000000...........504A
000400000000...........A092
000800000000...........9109
001000000000...........F23C
002000000000...........3455
004000000000...........68AF
008000000000...........D15B
010000000000...........7298
020000000000...........E536
040000000000...........1A41
080000000000...........3487
100000000000...........690B
200000000000...........D213
400000000000...........7408
800000000000...........E816

Заметил еще одну вещь. Сегмент данных проверяется на четность (количество едениц), если четно, то еще прибавляется 0003.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016