Калькулятор контрольной суммы CRC

Вычислите циклическую контрольную сумму CRC для текста или последовательности байтов в шестнадцатеричном виде. Готовые варианты CRC-8, CRC-8/MAXIM, CRC-16/MODBUS, CRC-16/CCITT-FALSE, XMODEM, KERMIT, X-25, CRC-32, CRC-32C и другие, а также произвольные параметры: ширина, полином, начальное значение, отражение и финальный XOR.

Входные данные
Например: 01 03 00 00 00 0A или 0x31,0x32
Отражение
CRC—
В десятичном виде—
Двоичный вид—
Проверочное значение «123456789»—по нему сверяют реализацию

Все варианты для этих данных

Рекламный блок «после калькулятора» (ads/after-calc.html)

Как работает CRC

Циклический избыточный код (CRC) — это остаток от деления сообщения, представленного как многочлен над полем из двух элементов, на порождающий многочлен (полином). Деление выполняется без переносов: вычитание заменяется операцией XOR. Остаток длиной в ширину CRC дописывается к сообщению, и приёмник по нему проверяет, не исказились ли данные.

CRC шириной n бит гарантированно обнаруживает любую одиночную ошибку, любой пакет ошибок длиной до n бит и все ошибки с нечётным числом искажённых битов (если полином делится на x + 1). Случайное искажение остаётся незамеченным с вероятностью около 2−n.

Параметры CRC

Одного полинома недостаточно, чтобы однозначно определить алгоритм. Принятая модель описывает CRC шестью параметрами:

  • Width — ширина в битах (8, 16, 32…).
  • Poly — полином без старшего бита: 0x1021 означает x¹⁶ + x¹² + x⁵ + 1.
  • Init — начальное значение регистра.
  • RefIn — обрабатывать ли биты каждого байта начиная с младшего.
  • RefOut — отражать ли результат перед финальным XOR.
  • XorOut — значение, с которым складывается результат.

Для проверки реализации используют контрольное значение — CRC строки «123456789». Например, для CRC-32 это CBF43926, для CRC-16/MODBUS — 4B37.

Рекламный блок «внутри статьи» (ads/in-article.html)

Пример: Modbus RTU

Запрос «прочитать 10 регистров начиная с 0 у устройства 1» — байты 01 03 00 00 00 0A. CRC-16/MODBUS для них равен 0xCDC5. В кадре Modbus RTU контрольная сумма передаётся младшим байтом вперёд: 01 03 00 00 00 0A C5 CD.

Где встречается

  • CRC-32 — архивы ZIP и GZIP, Ethernet, PNG, SATA.
  • CRC-32C — iSCSI, файловые системы Btrfs и ext4, протоколы хранения данных.
  • CRC-16/MODBUS и CRC-16/CCITT — промышленные протоколы, Modbus RTU, X.25, Bluetooth, SD-карты.
  • CRC-8 — датчики и шина SMBus, CRC-8/MAXIM — устройства 1-Wire (например, датчики температуры DS18B20).

CRC защищает только от случайных ошибок. Злоумышленник легко подберёт данные с нужной контрольной суммой, поэтому для защиты от подделки используют криптографические хеши и HMAC.

Рекламный блок «внизу страницы» (ads/bottom.html)