проверка crc32 битового потока, дополненного нулями - PullRequest
1 голос
/ 25 февраля 2011

Я пытаюсь проверить это утверждение из Википедии (http://en.wikipedia.org/wiki/Cyclic_redundancy_check):

Иногда реализация добавляет n 0-бит ( n , равный размеру CRC) к потоку битов, который необходимо проверить до того, как произойдет полиномиальное деление. Это удобно тем, что оставшаяся часть исходного потока битов с добавленным контрольным значением точно равна нулю, поэтому CRC можно проверить, просто выполнив полиномиальное деление на принятом потоке битов и сравнив остаток с нулем.

Я использовал онлайн калькулятор CRC-32 от http://www.lammertbies.nl/comm/info/crc-calculation.html

  1. Исходное сообщение 'test' или 0x74657374, его CRC-32 - 0xD87F7E0C.
  2. Затем добавьте 4 нулевых байта, чтобы сообщение было 0x7465737400000000, его CRC-32 - 0x15521A21.
  3. Затем замените нули на CRC-32 из шага 2, сообщение будет 0x7465737415521A21.
  4. CRC32 из 0x7465737415521A21 равен 0xE1E9ADD7, не должно ли быть 0 здесь?

Может кто-нибудь указать мне, что пошло не так?

1 Ответ

3 голосов
/ 13 июля 2011

На самом деле алгоритм CRC-32 имеет следующее свойство:

  1. Предположим, у нас есть произвольный файл x.
  2. Пусть y = crc32 (x) в little endian .
  3. Тогда crc32 (x добавьте y) = 0x2144DF1C.
...