Вопрос

У меня есть двоичная строка (показана в Hex ниже) и я использую CRC-16-CCITT.Я хочу все мои CRC, чтобы выйти на заданное значение, 0x1d0f.Я знаю, что можно сделать CRCS сопоставить это значение, добавив 2 байта до конца исходного сообщения, но не уверен, как выяснить, что нужно прилагаемое значение.

ex.

0x01 0000 0000 0000 0000 0000 0000 0000 0000 13d8

Прилагаемое значение - это 0x13d8

, добавив эту 13D8 на сообщение, CRC дает мне желаемый 0x1D0F.

Любая помощь о том, как рассчитать это значение 0x13d8 значительно оценилось бы.

Если это может быть сделано аккуратно в коде, который будет бонусом!

Это было полезно?

Решение

Теория довольно проста, но, конечно, требуется правильно реализовать.

Вы можете выбрать любые 16 бит в любом месте сообщения (включая два байта в конце или 16 отдельных битов, разбросанных там, где вам нравится) быть неопределенным. Позвоните им xi для i= 0..15 . Затем используйте битовый алгоритм CRC для обработки сообщения, но генерируют и обновляют коэффициенты 16 линейных уравнений в xi , представляя 16 бит CRC.

Затем у вас есть простое матричное уравнение AX + B= C . Операции для Ax + B= C не являются обычным умножением и добавлением, а довольно однотоковым и и Exclusive - или операции. < / P >.

Теперь вы используете обычные методы для инвертирования матрицы A , что на самом деле проще с и и xor (добавление и вычитание теперь Оба одно и то же, просто эксклюзивное - или), вычисляют b ^ c и умножьте это по обратным. Теперь у вас есть значения, чтобы поставить биты XI , чтобы получить желаемый CRC.

Дополнительное упрощение состоит в том, что вам не нужно фактическое сообщение, просто длина и местоположение XI , а затем выполните вышеупомянутые со всеми другими битами сообщения, установленного на ноль Отказ Это потому, что если у вас есть два сообщения p и q одинаковой длины, то crc (p) ^ crc (q)= crc (p ^ q) . (Это относится к алгоритму CORE CRC, игнорируя до и после обработки CRC.)

<Сильное> Обновление:

Вы можете скачать spoof.c , который решает проблему изменения сообщения для создания конкретного CRC ,

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top