Кодировщик и декодер Base64 / URL / JWT
Кодируйте и декодируйте Base64 или URL и просматривайте заголовок и полезную нагрузку JWT в браузере.
Как пользоваться
- Вставьте или введите данные в поле «Текст или JWT»: обычный текст для кодирования, строку Base64 или строку с процентным кодированием для декодирования либо JWT для просмотра.
- Нажмите «Кодировать Base64» или «Декодировать Base64», чтобы преобразовать текст в Base64 и обратно, либо «Кодировать URL» или «Декодировать URL», чтобы добавить или снять процентное кодирование. Результат или сообщение об ошибке появится в поле «Результат».
- Чтобы просмотреть токен, вставьте его с префиксом Bearer или без него и нажмите «Декодировать JWT». Заголовок и полезная нагрузка отобразятся как JSON с отступами, а claims iat, nbf и exp из полезной нагрузки, если они есть, будут перечислены в блоке «Временные claims JWT»; числовые значения при этом переводятся в UTC и в ваше местное время.
- Нажмите «Копировать результат», чтобы скопировать вывод. Чтобы отменить кодирование, вставьте закодированный текст в поле «Текст или JWT» и нажмите соответствующую кнопку декодирования. Декодирование с последующим повторным кодированием может не вернуть точный оригинал: URL-safe Base64 или Base64 без дополнения возвращается в стандартном алфавите с дополнением = там, где оно нужно, а «Кодировать URL» превращает +, оставшийся после «Декодировать URL», в %2B.
Частые вопросы
Отправляется ли куда-нибудь вставленный текст или токен?
Нет. Кодирование и декодирование выполняются в вашем браузере с помощью JavaScript, а введённые данные не отправляются в LeedyBox. JWT часто служит учётными данными для входа и может сработать у любого, кто им завладел, пока не истечёт его срок или его не отзовут, поэтому обращайтесь с действующим токеном как с паролем и не показывайте его на скриншотах или в чатах.
Почему «Декодировать Base64» сообщает, что данные не являются корректным текстом UTF-8?
«Декодировать Base64» показывает декодированные байты как текст UTF-8 и останавливается с этой ошибкой, если они не являются корректным UTF-8, например для изображений PNG или JPEG, большинства PDF-файлов и сжатых данных, а часто и для текста в другой кодировке, такой как Latin-1 или Shift_JIS. Инструмент не сохраняет декодированные байты в файл, поэтому используйте его для Base64, содержащего текст. Data URI вида data:image/png;base64,... отклоняется как некорректный Base64, поскольку двоеточие, точка с запятой и запятая не входят в алфавит Base64.
Поддерживаются ли URL-safe Base64 и значения без дополнения?
Да, при декодировании: «Декодировать Base64» принимает стандартный алфавит (+ и /) и URL-safe алфавит (- и _), с дополнением = или без него, и игнорирует пробелы и переводы строк. «Кодировать Base64» выводит стандартный алфавит с дополнением; для URL-safe формы, используемой в JWT, замените + на -, / на _ и удалите знаки = в конце. Текст кодируется в UTF-8 точно в том виде, в каком введён, поэтому пробел или перевод строки в конце меняет результат, а переводы строк в поле кодируются как LF.
Стоит ли кодировать весь URL целиком с помощью «Кодировать URL»?
Обычно нет. «Кодировать URL» работает как encodeURIComponent в JavaScript: процентному кодированию подвергаются все символы, кроме A–Z, a–z, 0–9 и - _ . ! ~ * ' ( ), поэтому кодируются и символы / ? & = : и #, задающие структуру URL. Используйте его для одной части, например значения одного параметра запроса. Пробелы превращаются в %20, а символы вне ASCII кодируются своими байтами UTF-8, так что é превращается в %C3%A9.
Почему плюсы не превращаются в пробелы и когда «Декодировать URL» выдаёт ошибку?
«Декодировать URL» работает как decodeURIComponent в JavaScript: декодирует escape-последовательности %XX и оставляет + без изменений, потому что в общем синтаксисе URL (RFC 3986) + не обозначает пробел. В данных HTML-форм (application/x-www-form-urlencoded), которые используются во многих строках запроса, пробелы кодируются знаком +, поэтому перед декодированием таких данных замените каждый + на пробел; настоящий знак плюс в этом формате записывается как %2B и всё равно декодируется правильно. Ошибка возникает, если после % не идут две шестнадцатеричные цифры, как в 50% off, или если экранированные байты не являются корректным UTF-8, как в %E2%82.
Какие токены может прочитать «Декодировать JWT»?
Токены в компактной форме из трёх частей header.payload.signature, которую используют подписанные JWT (JWS), включая неподписанные токены с пустой частью подписи. Подпись не проверяется, поэтому декодированный токен не доказывает, что он подлинный. Зашифрованные токены (JWE) состоят из пяти частей, и их полезную нагрузку нельзя прочитать без ключа, поэтому для них выводится ошибка формата. Если заголовок или полезная нагрузка не декодируются из Base64 в JSON или полезная нагрузка — простое значение, например строка или число, а не объект JSON, выводится сообщение «Ошибка разбора JWT». Целые числа больше 9 007 199 254 740 991 в заголовке или полезной нагрузке могут округляться, когда браузер разбирает JSON, поэтому у длинных числовых идентификаторов последние цифры могут отображаться иначе.
Как показываются времена exp, nbf и iat и когда токен помечается как истёкший?
Значения читаются как Unix-время в секундах, как определено в стандарте JWT (RFC 7519), и показываются в UTC и в вашем местном времени. Статусы «ИСТЁК» и «Ещё не действителен» получаются сравнением exp и nbf с часами вашего устройства в момент нажатия «Декодировать JWT», без допуска на расхождение часов, поэтому при неверно установленных часах статус тоже будет неверным. Серверы могут допускать небольшое расхождение, часто не более нескольких минут, поэтому около момента exp или nbf сервер может прийти к иному выводу, чем показанный здесь статус. Время, записанное строкой, например "1700000000", отмечается как некорректная числовая метка времени Unix.