Кодирование

JWT Encoder/Decoder

Кодирование и декодирование JWT-токена — заголовок, полезная нагрузка, подпись HMAC и стандартные поля.

JWT (JSON Web Token) — компактный формат передачи подписанных данных, состоящий из трёх частей, разделённых точкой: заголовка (header), полезной нагрузки (payload) и подписи (signature). Инструмент декодирует любой JWT и показывает все три части, а также позволяет собрать новый токен с подписью HMAC.

Декодирование не проверяет валидность подписи — чтобы увидеть содержимое токена, секретный ключ не нужен. Проверка подписи нужна только тогда, когда вы доверяете токену как подлинному.

Как пользоваться

Типичные сценарии

Что стоит помнить

JWT не зашифрован, а лишь закодирован в Base64URL — payload может прочитать кто угодно. Не кладите туда пароли или другие секреты.

Подпись защищает от подделки данных, но не от их просмотра. Для конфиденциальности нужно дополнительное шифрование (JWE) или HTTPS-транспорт.

Статья об этом инструменте: JWT: структура токена и что значит «декодировать» JWT

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

Декодирование JWT проверяет подпись токена?

Нет. Без секрета или ключа декодирование лишь показывает содержимое Header и Payload — это просто Base64URL-данные, доступные всем. Подтвердить, что токен подлинный и не изменён, можно только проверив подпись с правильным ключом.

Значит ли это, что данные в JWT можно спрятать от пользователя?

Нет, Payload не шифруется, а лишь кодируется, поэтому любой человек с токеном может прочитать claims. Секретные данные в JWT класть не стоит — подпись гарантирует только целостность, а не конфиденциальность.

Секрет и ключи, введённые в инструмент, куда-то отправляются?

Нет, кодирование, декодирование и генерация подписи выполняются полностью в браузере — секрет и ключи никуда не передаются.

Что такое атака с подменой алгоритма на "none"?

Если бекенд наивно доверяет полю alg из заголовка токена, злоумышленник может заменить его на none, убрать подпись — и токен с произвольными данными пройдёт проверку. Надёжные библиотеки требуют явно задавать ожидаемый алгоритм при верификации.

Почему не стоит хранить JWT в localStorage для чувствительных сессий?

localStorage доступен любому JavaScript-коду на странице, поэтому уязвим к XSS — вредоносный скрипт может украсть токен. Для сессионных токенов безопаснее использовать httpOnly-cookie, недоступные для JavaScript.

Статьи: Кодирование

Base64: зачем нужно кодирование и как оно работает

Как Base64 превращает бинарные данные в текст ASCII и где это реально нужно.

Base32: чем отличается от Base64 и когда удобнее

Регистронезависимый алфавит Base32 и сценарии, где он удобнее Base64.

URL Encode/Decode: percent-encoding в ссылках

Как спецсимволы в адресной строке и query-параметрах превращаются в %XX-последовательности.

HTML Entities: как безопасно выводить спецсимволы на странице

Почему символы < > & нужно экранировать и как это предотвращает поломку разметки.

Unicode Escape: что означают последовательности \uXXXX

Откуда в JSON и JS-строках берутся последовательности вида \u0041 и что они означают.

ROT13 и шифр Цезаря: простая замена символов

Почему сдвиг на 13 букв делает ROT13 симметричным и зачем его вообще используют сегодня.

Punycode: как домены с кириллицей работают в DNS

Как домен вроде «пример.рф» превращается в ASCII-запись с префиксом xn--.

Азбука Морзе: как текст превращается в точки и тире

Принцип кодирования букв точками и тире и где азбука Морзе применяется сейчас.

Data URI: когда встраивать изображения прямо в код

Как data:-URI встраивает содержимое файла прямо в HTML или CSS и когда это оправдано.

Gzip + Base64: сжатие данных для передачи текстом

Зачем сжатые бинарные данные ещё и кодируют в Base64 перед тем, как поместить в текстовое поле.

XML Entities: экранирование символов в XML-документах

Пять обязательных XML-entity, без которых документ ломается при парсинге.