Skip to content

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

Вставьте текст или шестнадцатеричные байты и получите все 63 варианта CRC-8, CRC-16 и CRC-32 сразу. Контрольная сумма не сходится? Введите её — инструмент назовёт вариант: MODBUS, CCITT-FALSE, XMODEM, KERMIT. Всё в браузере.

Без отслеживания Работает в браузере Бесплатно
Все вычисления выполняются локально в вашем браузере — вставленные данные не покидают это устройство.
Попробуйте

Все 63 варианта

Каждая строка пересчитывается во время набора.
Вариант Результат 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
Пользовательские параметры

Пригодится, когда в документации к устройству указан полином, которого нет в таблице выше.

Результат
Все 63 набора параметров сверяются в тестах с опубликованными эталонными значениями каталога, а CRC-32/ISO-HDLC дополнительно перекрёстно проверяется встроенным в Node модулем zlib.crc32 как независимым источником истины. — Инженерная команда Go-Tools · Sep 6, 2026

Собрано и проверено инженерной командой Go Tools.

Быстрые ответы

CRC-32 строки «123456789»

0xCBF43926 0xCBF43926 для CRC-32/ISO-HDLC — варианта, который применяют ZIP, PNG, Ethernet и gzip.

CRC-16/MODBUS строки «123456789»

0x4B37 0x4B37 при poly 0x8005, init 0xFFFF, отражённых входе и выходе и без финального XOR.

CRC-16/CCITT-FALSE строки «123456789»

0x29B1 0x29B1. Формальное название в каталоге — CRC-16/IBM-3740: poly 0x1021, init 0xFFFF, без отражения.

Сколько всего вариантов CRC?

63 Калькулятор охватывает 63 каталогизированных варианта: 20 разрядностью 8, 31 разрядностью 16 и 12 разрядностью 32.

Что такое CRC?

Циклический избыточный код рассматривает блок данных как коэффициенты очень длинного двоичного многочлена, делит его на фиксированный порождающий многочлен по правилам арифметики по модулю 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

Что умеет этот калькулятор

Все 63 варианта сразу

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. Именно поэтому такой ввод служит стандартной самопроверкой: если библиотека расходится с таблицей на этой странице, ошибается библиотека.

Кадр запроса Modbus RTU

01 03 00 00 00 0A
CRC-16/MODBUS = 0xCDC5

Чтение регистров хранения у ведомого устройства 1. Modbus RTU дописывает младший байт CRC первым, поэтому в линию этот кадр уходит как 01 03 00 00 00 0A C5 CD — на такую перестановку приходится изрядная доля контрольных сумм, которые «не сходятся».

Те же байты — четыре ответа CRC-16

DEADBEEF
MODBUS = 0xC19B, CCITT-FALSE = 0x4097, XMODEM = 0xC457, KERMIT = 0x1915

Читается в режиме Hex, поэтому это четыре байта, а не восемь символов строки. Четыре самых известных варианта CRC-16 расходятся на них полностью. Ничего не сломано: они различаются начальным значением, отражением и финальным XOR, а не правильностью.

Обратный поиск по ответу устройства

123456789, ожидаемое значение 0x29B1
CRC-16/IBM-3740 (в руководстве к устройству он может называться CRC-16/CCITT-FALSE)

Ради этого случая калькулятор и сделан. У вас есть данные и контрольная сумма, посчитанная кем-то другим, но нет названия варианта — значит, набор параметров приходится искать по результату.

Как пользоваться калькулятором CRC

  1. 1

    Выберите текст или hex

    Кадры протоколов почти всегда идут в шестнадцатеричном виде. Текстовый режим нужен только тогда, когда контрольная сумма считается для литеральной строки — например, для самопроверочного значения 123456789.

  2. 2

    Вставьте данные

    В шестнадцатеричном режиме разделители игнорируются, поэтому 01 03 00 00 00 0A, 0x01 0x03 и 010300 00000A принимаются одинаково.

  3. 3

    Найдите нужный вариант

    Таблица сгруппирована по разрядности. Формальные названия взяты из каталога RevEng, а под ними напечатаны псевдонимы, которыми, скорее всего, пользуется руководство к устройству.

  4. 4

    Или идите от обратного

    Если контрольная сумма уже есть, а нужен её вариант, впишите её в поле ожидаемого значения и прочитайте подсвеченную строку.

Почему контрольная сумма не сходится

Контрольная сумма считается для текста «01 03», а не для байтов

Если остаться в текстовом режиме, калькулятор считает сумму по 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

Предположение, что «CRC-16» задаёт алгоритм

В каталоге 31 вариант разрядностью 16 бит. Без остальных пяти параметров это название ничего не сужает.

✗ Неверно
spec says: "trailer is a CRC-16"
✓ Верно
spec says: "CRC-16/MODBUS, poly 0x8005, init 0xFFFF, refin/refout true"

Когда это нужно

Отладка линии Modbus
ПЛК отвергает ваши кадры, и надо понять, ошибочен ли CRC или в нём просто переставлены байты. Посчитайте CRC-16/MODBUS и сравните оба порядка.
Опознание недокументированного протокола
Вы сняли трафик, в котором двухбайтовый хвост похож на контрольную сумму. Подайте payload вместе с этим хвостом в обратный поиск и посмотрите, какой вариант на него претендует.
Перенос прошивки на другой инструментарий
Библиотека поставщика и ваша собственная реализация расходятся. Сравнение обеих с эталонным значением из каталога показывает, которая из них съехала.
Написание или рецензирование спецификации
Слово «CRC-16» в протокольном документе гарантирует ошибки совместимости. Таблица параметров даёт те шесть значений, которые действительно фиксируют алгоритм.
Проверка сохранённых данных
Файловые системы, форматы архивов и образы флеш-памяти несут поля CRC-32. Пересчёт такого поля показывает, уцелел ли блок.

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

Запись полинома
В таблице полиномы напечатаны в обычной записи, старшим битом вперёд: 0x8005 означает x^16 + x^15 + x^2 + 1. Отражённые реализации нередко показывают тот же полином как 0xA001, а нотация Купмана сдвигает его ещё иначе. Три записи одного полинома — частая причина неудачных переносов.
Начальное значение
Старт регистра с 0xFFFF, а не с 0x0000, делает контрольную сумму чувствительной к ведущим нулевым байтам. При нулевом начальном значении приписывание нулей в начало сообщения не меняет CRC — а это ровно то искажение, которое обязан ловить протокол с кадрированием.
Отражение
refin переворачивает биты внутри каждого входного байта, refout переворачивает итоговый регистр. Аппаратура продвигает биты старшим вперёд, а байт-ориентированной программе дешевле младшим вперёд — отражённые формы параметров и примиряют эти два подхода.
Финальный XOR
xorout применяется последним, и это не просто init, перенесённый на другой конец. Нулевые байты, дописанные в конец сообщения, обнаруживаются в обоих случаях. Ненулевой xorout меняет другое — остаток, который получает приёмник, прогоняя CRC по сообщению вместе с контрольной суммой: при xorout, равном нулю, этот остаток и сам равен нулю, так что нули, дописанные после поля CRC, всё равно проходят. Кроме того, он заставляет полностью нулевое сообщение давать ненулевую контрольную сумму.
Эталонное значение
Каждый каталогизированный вариант публикует свой результат для ASCII-строки 123456789. Те 63 значения, которые страница показывает при загрузке этого ввода, и есть опубликованные константы — по ним же тестируется движок этой страницы.

Как добиться совпадения

Называйте параметры, а не алгоритм
В спецификациях пишите «poly 0x1021, init 0xFFFF, refin false, refout false, xorout 0x0000». За названием «CRC-16/CCITT» скрывалось как минимум три разные вещи.
Проверяйте порядок байтов отдельно
Когда контрольной сумме до совпадения не хватает одной перестановки байтов, алгоритм верен, а неверно кадрирование. Считайте это двумя разными дефектами.
Сначала сверьтесь с эталонным значением
Прежде чем разбираться с данными, убедитесь, что ваша реализация возвращает для 123456789 значение из каталога. Это за секунды отделяет сломанный алгоритм от сломанного ввода.
Явно фиксируйте охват расчёта
Большинство расхождений возникает из-за того, что начальные маркеры, адреса или поля длины то включают в расчёт, то нет. Определите точно, какие байты покрывает CRC, и запишите это.
Не применяйте CRC там, где нужен MAC
CRC линеен и подделывается без труда. Если данные может изменить противник, применяйте HMAC.

Часто задаваемые вопросы

Почему устройство возвращает не тот CRC, что этот калькулятор?
Почти всегда потому, что сравниваются два разных варианта. У одного только CRC-16 в каталоге 31 набор параметров, и MODBUS, CCITT-FALSE, XMODEM и KERMIT дают из одних и тех же байтов четыре несвязанных числа. Впишите значение устройства в поле ожидаемого значения: если какой-нибудь вариант его воспроизводит, соответствующая строка подсветится — ответ получен. Если не совпадает ничего, значит, считается не то, что вы думаете: проверьте порядок байтов и то, входят ли в расчёт начальный и конечный маркеры кадра.
Какой CRC-16 применяют в Modbus?
CRC-16/MODBUS: полином 0x8005, начальное значение 0xFFFF, вход и выход отражены, финального XOR нет. Путаницу чаще создаёт не алгоритм, а порядок передачи — Modbus RTU отправляет младший байт CRC первым, поэтому кадр с контрольной суммой 0xCDC5 несёт в конце байты C5 CD. Разбор кадра по шагам — в руководстве по вариантам CRC-16.
Чем CRC-16/CCITT отличается от CRC-16/CCITT-FALSE?
Это разные алгоритмы с обманчиво похожими названиями — именно поэтому каталог RevEng переименовал оба. То, что называют CCITT-FALSE, — это CRC-16/IBM-3740: начальное значение 0xFFFF, отражения нет. А под простым CCITT обычно имеют в виду CRC-16/KERMIT: начальное значение 0x0000, вход и выход отражены. Калькулятор показывает и формальное название, и то, которым, скорее всего, пользуется руководство к вашему устройству.
Позволяет ли CRC обнаружить подмену файла?
Нет. CRC — код обнаружения ошибок, рассчитанный на случайные искажения в зашумлённом канале, и он линеен: изменить сообщение и подогнать его так, чтобы CRC по-прежнему сходился, может кто угодно. Против целенаправленного злоумышленника нужна криптографическая хеш-функция, например SHA-256, или конструкция с аутентификацией вроде HMAC. Со своей задачей CRC справляется отлично, но безопасности не даёт никакой.
Что на самом деле делают refin и refout?
refin переворачивает порядок битов внутри каждого входного байта перед подачей в регистр; refout переворачивает порядок битов итогового регистра. Они существуют потому, что аппаратные сдвиговые регистры и программные табличные реализации продвигают биты в противоположных направлениях, а отражённые формы позволяют обеим прийти к одному числу. Это не то же самое, что порядок байтов: отражение действует на биты внутри байта, а порядок байтов определяет очерёдность самих байтов.
У меня есть только контрольная сумма, но не сами данные. Может ли инструмент сработать в обратную сторону?
Нет, и никакой инструмент не может. CRC сжимает сообщение произвольной длины до 8, 16 или 32 бит, поэтому любое конкретное значение делят между собой бесчисленные разные сообщения — дело не в усилиях. Обратный поиск на этой странице отвечает на более узкий вопрос: если есть данные и контрольная сумма, которую кто-то по ним посчитал, какой набор параметров связывает одно с другим. Если вы перехватили ответ устройства, но не полезную нагрузку за ним, сначала перехватите нагрузку. О выборе между разрядностями, а не об опознании конкретного варианта, читайте в руководстве по вариантам CRC-16.
Почему калькулятор показывает 63 варианта, если в устройстве указан один?
Потому что полезный вопрос обычно звучит не «посчитать CRC», а «каким из вариантов получено значение, которое у меня на руках». Инструменты, требующие сначала выбрать вариант, исходят из того, что ответ уже известен. Показ всех вариантов сразу превращает опознание в один просмотр таблицы, а колонки с параметрами позволяют сверить совпадение со спецификацией, а не доверять названию.
Уходят ли мои данные куда-нибудь?
Нет. Весь расчёт идёт в браузере на том же движке, который отрисовал таблицу на этой странице: ни загрузки, ни обращений к API, ни журналирования. Инструмент продолжает работать и без сети — это важно, потому что на вход CRC часто подают боевые кадры или образы прошивок.

Похожие инструменты

Все инструменты →

Инструмент расшифровки AES — совместим с OpenSSL и CryptoJS

Безопасность

Расшифровывайте AES онлайн — GCM/CBC/CTR, парольная фраза или необработанный ключ, автоматическое определение формата OpenSSL и CryptoJS «U2FsdGVkX1». Работает на 100% в браузере, ключи никогда не покидают страницу.

Инструмент шифрования AES — GCM, CBC и CTR

Безопасность

Бесплатное онлайн-шифрование AES — AES-128/192/256, GCM/CBC/CTR, парольная фраза (PBKDF2) или необработанный ключ. Работает на 100% в браузере, ничего не загружается на сервер.

Генератор и проверка bcrypt-хешей

Безопасность

Создавайте и проверяйте bcrypt-хеши паролей онлайн — настраиваемый фактор стоимости, префиксы $2b$/$2a$/$2y$. 100% в браузере; пароль никуда не отправляется.

HMAC генератор и проверка подписи

Безопасность

Бесплатный онлайн-генератор и верификатор HMAC. Вычисляйте HMAC-SHA256/SHA1/SHA384/SHA512 с ключами в Text, Hex или Base64 и выводом в Hex/Base64/Base64URL. Всё в браузере — ключи не покидают страницу.

Декодер JWT

Безопасность

Декодируйте JWT-токены онлайн бесплатно. Просмотр header, payload, signature, срока действия, алгоритма и claims. 100% в браузере — токен не покидает устройство. Без регистрации.

JWT-энкодер и генератор

Безопасность

Бесплатный онлайн-генератор и энкодер JWT. Соберите header и payload, подпишите с HS256, RS256 или ES256 мгновенно. 100% в браузере — ваш секрет и ключ не покидают устройство.