Как я мог угадать алгоритм контрольной суммы? - PullRequest
5 голосов
/ 18 ноября 2008

Кто-нибудь знает, как выяснить алгоритм CRC, если задан код + строка CRC?

У меня есть несколько строк, состоящих из кода + соответствующие CRC, но я не знаю, как рассчитать соответствующий CRC, чтобы я мог создать больше строк кода. Вот несколько примеров (16-битный код + 4-битный CRC):

0010101000011101 + 0000
0010101000011111 + 0001
1000110011101101 + 0001
0000000000000100 + 0010
0011100011001110 + 0011
1000110011101110 + 0100
0001011110101100 + 0100
0010101000011110 + 0101
0011100011001101 + 0110
0001011110101111 + 0111
0011100011001100 + 1001
0011100011001111 + 1010
0001011110101101 + 1011
0000000000001000 + 1011
0000111100001101 + 1100
0000000000001100 + 1100
1111111111111111 + 1101
1000110011101111 + 1101
1000110011101100 + 1110
0001011110101110 + 1110
1111111100001101 + 1110
0010101000011100 + 1111

Эти коды поступают от отправителя RF (433 МГц), такого как продукты X10.

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

Может кто-нибудь помочь?

Обновление:

RE: поиск спецификаций, я также думаю, будет лучшим решением, но так как это не вариант, мне нужно каким-то образом перебрать контрольную сумму.

Это проблема, у меня нет спецификаций, и я нигде не могу их получить. Я пробовал несколько разных методов вычисления контрольной суммы без результата, нет ли способа сравнить входные строки, выяснить, что у них общего, и таким образом получить алгоритм

Ответы [ 9 ]

5 голосов
/ 18 ноября 2008

Что заставляет вас думать, что это CRC? Обычно CRC не используются для таких небольших фрагментов данных.

Для меня это скорее похоже на некий паритет, код ECC (фактически FEC ) или Reed-Solomon Может быть Код Хэмминга - Хэмминг широко используется в промышленности, в телекоммуникациях.

3 голосов
/ 18 ноября 2008

Угадай это очень правильное слово. Если это радиочастотное устройство не является проприетарным, попробуйте прочитать характеристики ! Это был бы самый простой путь.

Гадание на всех возможных CRC (или алгоритмах хеширования) не выглядит слишком оптимистичным. Просто посмотрите здесь .

Третья возможность состоит в том, чтобы перепроектировать код, который вы используете для генерации контрольных сумм.

удачи:)

2 голосов
/ 19 апреля 2011
['0010101000011101', '0000', '0'] ['0010101000011110', '0101', '5'] [1, 3]
['1000110011101101', '0001', '1'] ['1000110011101110', '0100', '4'] [1, 3]
['0000000000000100', '0010', '2'] ['0000000000001000', '1011', 'b'] [0, 3]
['0011100011001110', '0011', '3'] ['0011100011001101', '0110', '6'] [1, 3]
['0001011110101100', '0100', '4'] ['0001011110101111', '0111', '7'] [2, 3]
['0011100011001100', '1001', '9'] ['0011100011001111', '1010', 'a'] [2, 3]
['0001011110101101', '1011', 'b'] ['0001011110101110', '1110', 'e'] [1, 3]
['1000110011101111', '1101', 'd'] ['1000110011101100', '1110', 'e'] [2, 3]

результаты дифференциального «анализа», это не похоже на crc, ссылка: http://www.cosc.canterbury.ac.nz/greg.ewing/essays/CRC-Reverse-Engineering.html

Я сомневаюсь, что это и код Хемминга, поскольку 4 бита четности допускают только 11 битов данных, а не 16.

2 голосов
/ 18 ноября 2008

@ mecki может быть правильным, но это трудно понять. Вы можете попробовать Формат данных для беспроводных устройств X-10 и FAQ по X-10 .

0 голосов
/ 18 ноября 2008

Судя по длине строк в зависимости от длины контрольной суммы, я бы сказал, что это простая контрольная сумма, исправляющая 1 ошибку. Это, вероятно, один из простых, использующих расстояния Хэмминга. Я не могу вспомнить, как это работало, и у меня нет учебников по теории информации / линейной алгебре.

0 голосов
/ 18 ноября 2008

Вероятно, это не CRC, но все же я не могу найти алгоритм исправления ошибок / избыточности.

0 голосов
/ 18 ноября 2008

Весь смысл хорошего алгоритма контрольной суммы в том, что он не не имеет ничего общего с вводимым текстом. Вы можете изменить один символ на входе. и вывод контрольной суммы вся изменится. Таким образом, единственный способ пойти другим путем - да, угадать. Если вы знаете, что такое входная и выходная строки, вы можете попробовать несколько распространенных алгоритмов контрольной суммы и посмотреть, дает ли какой-либо из них правильный вывод. Кроме этого, нет, это невозможно.

В качестве альтернативы, как предлагали другие, это может быть вовсе не контрольная сумма, а какой-то код исправления ошибок / избыточности, и это может быть легче выяснить.

0 голосов
/ 18 ноября 2008

Вы можете попробовать несколько распространенных методов CRC и надеяться на удачу, но ответ Маны (в поисках спецификаций) будет лучшим выбором.

0 голосов
/ 18 ноября 2008

Слишком много возможностей алгоритма CRC, чтобы эффективно угадывать. Вы можете воспользоваться легким подходом, который заключается в поиске спецификации для вашего устройства. Или вы можете воспользоваться методом грубой силы, который вычисляет CRC для каждого возможного входа и создает алгоритм, который генерирует тот же результат.

...