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