CRC-32 строки «123456789»
0xCBF43926 0xCBF43926 для CRC-32/ISO-HDLC — варианта, который применяют ZIP, PNG, Ethernet и gzip.
Вставьте текст или шестнадцатеричные байты и получите все 63 варианта CRC-8, CRC-16 и CRC-32 сразу. Контрольная сумма не сходится? Введите её — инструмент назовёт вариант: MODBUS, CCITT-FALSE, XMODEM, KERMIT. Всё в браузере.
| Вариант | Результат | Poly | Init | RefIn/RefOut | XorOut |
|---|---|---|---|---|---|
| CRC-8 | |||||
| CRC-8/AUTOSAR | 0x2F | 0xFF | false / false | 0xFF | |
| CRC-8/BLUETOOTH | 0xA7 | 0x00 | true / true | 0x00 | |
| CRC-8/CDMA2000 | 0x9B | 0xFF | false / false | 0x00 | |
| CRC-8/DARC | 0x39 | 0x00 | true / true | 0x00 | |
| CRC-8/DVB-S2 | 0xD5 | 0x00 | false / false | 0x00 | |
| CRC-8/GSM-A | 0x1D | 0x00 | false / false | 0x00 | |
| CRC-8/GSM-B | 0x49 | 0x00 | false / false | 0xFF | |
| CRC-8/HITAG | 0x1D | 0xFF | false / false | 0x00 | |
| CRC-8/I-432-1 CRC-8/ITU | 0x07 | 0x00 | false / false | 0x55 | |
| CRC-8/I-CODE | 0x1D | 0xFD | false / false | 0x00 | |
| CRC-8/LTE | 0x9B | 0x00 | false / false | 0x00 | |
| CRC-8/MAXIM-DOW CRC-8/MAXIM · DOW-CRC | 0x31 | 0x00 | true / true | 0x00 | |
| CRC-8/MIFARE-MAD | 0x1D | 0xC7 | false / false | 0x00 | |
| CRC-8/NRSC-5 | 0x31 | 0xFF | false / false | 0x00 | |
| CRC-8/OPENSAFETY | 0x2F | 0x00 | false / false | 0x00 | |
| CRC-8/ROHC | 0x07 | 0xFF | true / true | 0x00 | |
| CRC-8/SAE-J1850 CRC-8/J1850 | 0x1D | 0xFF | false / false | 0xFF | |
| CRC-8/SMBUS CRC-8 | 0x07 | 0x00 | false / false | 0x00 | |
| CRC-8/TECH-3250 CRC-8/AES · CRC-8/EBU | 0x1D | 0xFF | true / true | 0x00 | |
| CRC-8/WCDMA | 0x9B | 0x00 | true / true | 0x00 | |
| CRC-16 | |||||
| CRC-16/ARC CRC-16 · CRC-16/IBM · CRC-16/LHA | 0x8005 | 0x0000 | true / true | 0x0000 | |
| CRC-16/CDMA2000 | 0xC867 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/CMS | 0x8005 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/DDS-110 | 0x8005 | 0x800D | false / false | 0x0000 | |
| CRC-16/DECT-R R-CRC-16 | 0x0589 | 0x0000 | false / false | 0x0001 | |
| CRC-16/DECT-X X-CRC-16 | 0x0589 | 0x0000 | false / false | 0x0000 | |
| CRC-16/DNP | 0x3D65 | 0x0000 | true / true | 0xFFFF | |
| CRC-16/EN-13757 | 0x3D65 | 0x0000 | false / false | 0xFFFF | |
| CRC-16/GENIBUS CRC-16/DARC · CRC-16/EPC · CRC-16/EPC-C1G2 · CRC-16/I-CODE | 0x1021 | 0xFFFF | false / false | 0xFFFF | |
| CRC-16/GSM | 0x1021 | 0x0000 | false / false | 0xFFFF | |
| CRC-16/IBM-3740 CRC-16/CCITT-FALSE · CRC-16/AUTOSAR | 0x1021 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/IBM-SDLC CRC-16/X-25 · CRC-16/X25 · CRC-16/ISO-HDLC · CRC-B · X-25 | 0x1021 | 0xFFFF | true / true | 0xFFFF | |
| CRC-16/ISO-IEC-14443-3-A CRC-A | 0x1021 | 0xC6C6 | true / true | 0x0000 | |
| CRC-16/KERMIT CRC-16/CCITT · CRC-16/CCITT-TRUE · CRC-16/V-41-LSB · CRC-CCITT | 0x1021 | 0x0000 | true / true | 0x0000 | |
| CRC-16/LJ1200 | 0x6F63 | 0x0000 | false / false | 0x0000 | |
| CRC-16/M17 | 0x5935 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/MAXIM-DOW CRC-16/MAXIM | 0x8005 | 0x0000 | true / true | 0xFFFF | |
| CRC-16/MCRF4XX | 0x1021 | 0xFFFF | true / true | 0x0000 | |
| CRC-16/MODBUS | 0x8005 | 0xFFFF | true / true | 0x0000 | |
| CRC-16/NRSC-5 | 0x080B | 0xFFFF | true / true | 0x0000 | |
| CRC-16/OPENSAFETY-A | 0x5935 | 0x0000 | false / false | 0x0000 | |
| CRC-16/OPENSAFETY-B | 0x755B | 0x0000 | false / false | 0x0000 | |
| CRC-16/PROFIBUS CRC-16/IEC-61158-2 | 0x1DCF | 0xFFFF | false / false | 0xFFFF | |
| CRC-16/RIELLO | 0x1021 | 0xB2AA | true / true | 0x0000 | |
| CRC-16/SPI-FUJITSU CRC-16/AUG-CCITT | 0x1021 | 0x1D0F | false / false | 0x0000 | |
| CRC-16/T10-DIF | 0x8BB7 | 0x0000 | false / false | 0x0000 | |
| CRC-16/TELEDISK | 0xA097 | 0x0000 | false / false | 0x0000 | |
| CRC-16/TMS37157 | 0x1021 | 0x89EC | true / true | 0x0000 | |
| CRC-16/UMTS CRC-16/BUYPASS · CRC-16/VERIFONE | 0x8005 | 0x0000 | false / false | 0x0000 | |
| CRC-16/USB | 0x8005 | 0xFFFF | true / true | 0xFFFF | |
| CRC-16/XMODEM CRC-16/ACORN · CRC-16/LTE · CRC-16/V-41-MSB · ZMODEM | 0x1021 | 0x0000 | false / false | 0x0000 | |
| CRC-32 | |||||
| CRC-32/AIXM CRC-32Q | 0x814141AB | 0x00000000 | false / false | 0x00000000 | |
| CRC-32/AUTOSAR | 0xF4ACFB13 | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/BASE91-D CRC-32D | 0xA833982B | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/BZIP2 CRC-32/AAL5 · CRC-32/DECT-B · B-CRC-32 | 0x04C11DB7 | 0xFFFFFFFF | false / false | 0xFFFFFFFF | |
| CRC-32/CD-ROM-EDC | 0x8001801B | 0x00000000 | true / true | 0x00000000 | |
| CRC-32/CKSUM CRC-32/POSIX | 0x04C11DB7 | 0x00000000 | false / false | 0xFFFFFFFF | |
| CRC-32/ISCSI CRC-32C · CRC-32/BASE91-C · CRC-32/CASTAGNOLI · CRC-32/INTERLAKEN | 0x1EDC6F41 | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/ISO-HDLC CRC-32 · CRC-32/ADCCP · CRC-32/V-42 · CRC-32/XZ · PKZIP | 0x04C11DB7 | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/JAMCRC | 0x04C11DB7 | 0xFFFFFFFF | true / true | 0x00000000 | |
| CRC-32/MEF | 0x741B8CD7 | 0xFFFFFFFF | true / true | 0x00000000 | |
| CRC-32/MPEG-2 | 0x04C11DB7 | 0xFFFFFFFF | false / false | 0x00000000 | |
| CRC-32/XFER | 0x000000AF | 0x00000000 | false / false | 0x00000000 | |
Пригодится, когда в документации к устройству указан полином, которого нет в таблице выше.
Собрано и проверено инженерной командой Go Tools.
0xCBF43926 0xCBF43926 для CRC-32/ISO-HDLC — варианта, который применяют ZIP, PNG, Ethernet и gzip.
0x4B37 0x4B37 при poly 0x8005, init 0xFFFF, отражённых входе и выходе и без финального XOR.
0x29B1 0x29B1. Формальное название в каталоге — CRC-16/IBM-3740: poly 0x1021, init 0xFFFF, без отражения.
63 Калькулятор охватывает 63 каталогизированных варианта: 20 разрядностью 8, 31 разрядностью 16 и 12 разрядностью 32.
Циклический избыточный код рассматривает блок данных как коэффициенты очень длинного двоичного многочлена, делит его на фиксированный порождающий многочлен по правилам арифметики по модулю 2 и оставляет остаток. Этот остаток и есть контрольная сумма. Конструкция популярна потому, что деление сводится к сдвигам и XOR, а это в аппаратуре стоит почти ничего, и потому, что алгебра даёт жёсткие гарантии вместо статистических надежд: удачно выбранный 16-битный полином обнаруживает любую одиночную ошибку, любую двойную ошибку в пределах полезной длины блока, любое нечётное число перевёрнутых битов и любую пачку из 16 и менее подряд идущих искажённых битов.
На практике CRC запутывает то, что полином — лишь один из шести параметров. Две реализации могут совпадать по полиному и всё равно расходиться в каждом результате, потому что они различаются начальным значением регистра, тем, переворачивается ли порядок битов у входных байтов и у выходного регистра, и константой, которая подмешивается по XOR в итоговое значение. Вариант CRC — это весь набор параметров, а не один полином; поэтому название вроде «CRC-16» само по себе почти ничего не определяет, и поэтому рядом с каждым результатом на этой странице показаны полином, начальное значение, оба флага отражения и финальный XOR, а разрядность служит заголовком группы.
Одну оговорку таблица показать не может: 16-битный полином обнаруживает любое нечётное число перевёрнутых битов только тогда, когда он делится на x+1. Для двух самых частых — 0x1021 и 0x8005 — это выполняется, но не для всех: CRC-16/T10-DIF и CRC-16/PROFIBUS входят в число исключений.
// CRC-16/MODBUS: poly=0x8005, init=0xFFFF, refin/refout=true, xorout=0x0000
// Written in the reflected form, so the polynomial appears bit-reversed as 0xA001.
function crc16Modbus(bytes) {
let crc = 0xffff;
for (const byte of bytes) {
crc ^= byte;
for (let i = 0; i < 8; i++) {
crc = crc & 1 ? (crc >>> 1) ^ 0xa001 : crc >>> 1;
}
}
return crc;
}
crc16Modbus([0x01, 0x03, 0x00, 0x00, 0x00, 0x0a]); // 0xCDC5
// On the wire Modbus RTU sends the low byte first: ... 0x0A 0xC5 0xCD CRC-8, CRC-16 и CRC-32 пересчитываются вместе прямо во время набора. Никакого выпадающего списка, который нужно угадать, прежде чем хоть что-то увидеть.
Введите доставшуюся вам контрольную сумму — и варианты, которые её дают, подсветятся: опознание неизвестного алгоритма занимает один шаг вместо двадцати.
В каждой строке стоит название из каталога RevEng плюс псевдонимы, ходящие в обиходе: CCITT-FALSE, CRC-16/IBM, CRC-32C, X-25 и прочие.
Полином, начальное значение, оба флага отражения и финальный XOR стоят рядом с результатом, поэтому совпадение можно сверить со спецификацией.
Разрядность, полином, init, отражение и финальный XOR редактируются — для полиномов, так и не попавших ни в один каталог.
Вычисления идут в браузере. Боевые кадры и образы прошивок не покидают машину.
123456789
CRC-32/ISO-HDLC = 0xCBF43926, CRC-16/MODBUS = 0x4B37, CRC-8/SMBUS = 0xF4
Каждый вариант CRC в каталоге RevEng публикует свой результат для ASCII-строки 123456789. Именно поэтому такой ввод служит стандартной самопроверкой: если библиотека расходится с таблицей на этой странице, ошибается библиотека.
01 03 00 00 00 0A
CRC-16/MODBUS = 0xCDC5
Чтение регистров хранения у ведомого устройства 1. Modbus RTU дописывает младший байт CRC первым, поэтому в линию этот кадр уходит как 01 03 00 00 00 0A C5 CD — на такую перестановку приходится изрядная доля контрольных сумм, которые «не сходятся».
DEADBEEF
MODBUS = 0xC19B, CCITT-FALSE = 0x4097, XMODEM = 0xC457, KERMIT = 0x1915
Читается в режиме Hex, поэтому это четыре байта, а не восемь символов строки. Четыре самых известных варианта CRC-16 расходятся на них полностью. Ничего не сломано: они различаются начальным значением, отражением и финальным XOR, а не правильностью.
123456789, ожидаемое значение 0x29B1
CRC-16/IBM-3740 (в руководстве к устройству он может называться CRC-16/CCITT-FALSE)
Ради этого случая калькулятор и сделан. У вас есть данные и контрольная сумма, посчитанная кем-то другим, но нет названия варианта — значит, набор параметров приходится искать по результату.
Кадры протоколов почти всегда идут в шестнадцатеричном виде. Текстовый режим нужен только тогда, когда контрольная сумма считается для литеральной строки — например, для самопроверочного значения 123456789.
В шестнадцатеричном режиме разделители игнорируются, поэтому 01 03 00 00 00 0A, 0x01 0x03 и 010300 00000A принимаются одинаково.
Таблица сгруппирована по разрядности. Формальные названия взяты из каталога RevEng, а под ними напечатаны псевдонимы, которыми, скорее всего, пользуется руководство к устройству.
Если контрольная сумма уже есть, а нужен её вариант, впишите её в поле ожидаемого значения и прочитайте подсвеченную строку.
Если остаться в текстовом режиме, калькулятор считает сумму по ASCII-символам вашего шестнадцатеричного дампа, а не по байтам, которые он обозначает. Переключитесь в режим Hex — счётчик байтов под переключателем режима показывает, какое прочтение получилось.
Text mode, input "01 03" -> 5 bytes: 30 31 20 30 33
Hex mode, input "01 03" -> 2 bytes: 01 03
Modbus RTU передаёт младший байт CRC первым. Кадр, оканчивающийся на C5 CD, несёт контрольную сумму 0xCDC5, а не 0xC5CD.
expected 0xC5CD (bytes read in transmission order)
expected 0xCDC5 (bytes reassembled low-byte-first)
CRC покрывает байты, стоящие перед ним. Если подать обратно весь кадр вместе с хвостом, получится остаток, а не контрольная сумма.
01 03 00 00 00 0A C5 CD <- trailer included
01 03 00 00 00 0A <- payload only
В каталоге 31 вариант разрядностью 16 бит. Без остальных пяти параметров это название ничего не сужает.
spec says: "trailer is a CRC-16"
spec says: "CRC-16/MODBUS, poly 0x8005, init 0xFFFF, refin/refout true"
Безопасность
Расшифровывайте AES онлайн — GCM/CBC/CTR, парольная фраза или необработанный ключ, автоматическое определение формата OpenSSL и CryptoJS «U2FsdGVkX1». Работает на 100% в браузере, ключи никогда не покидают страницу.
Безопасность
Бесплатное онлайн-шифрование AES — AES-128/192/256, GCM/CBC/CTR, парольная фраза (PBKDF2) или необработанный ключ. Работает на 100% в браузере, ничего не загружается на сервер.
Безопасность
Создавайте и проверяйте bcrypt-хеши паролей онлайн — настраиваемый фактор стоимости, префиксы $2b$/$2a$/$2y$. 100% в браузере; пароль никуда не отправляется.
Безопасность
Бесплатный онлайн-генератор и верификатор HMAC. Вычисляйте HMAC-SHA256/SHA1/SHA384/SHA512 с ключами в Text, Hex или Base64 и выводом в Hex/Base64/Base64URL. Всё в браузере — ключи не покидают страницу.
Безопасность
Декодируйте JWT-токены онлайн бесплатно. Просмотр header, payload, signature, срока действия, алгоритма и claims. 100% в браузере — токен не покидает устройство. Без регистрации.
Безопасность
Бесплатный онлайн-генератор и энкодер JWT. Соберите header и payload, подпишите с HS256, RS256 или ES256 мгновенно. 100% в браузере — ваш секрет и ключ не покидают устройство.