Кодировщик и декодер Base64URL

Преобразуйте текст, шестнадцатеричные байты или файлы в URL-безопасный Base64 и обратно. В алфавите используются - и _ вместо + и /, а дополнение по умолчанию отключено, как в JSON Web Token и OAuth PKCE.

Работает полностью в браузере. Данные никуда не загружаются.

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

  1. Выберите «Кодировать» или «Декодировать». Вариант «Безопасный для URL (RFC 4648 §5)» уже выбран, а дополнение отключено.
  2. Введите или вставьте текст, введите шестнадцатеричные байты или откройте файл. Результат обновляется по мере ввода.
  3. Включайте «Дополнение» только в том случае, если принимающая система требует знаки = в конце.
  4. Скопируйте результат или скачайте его.

Что такое Base64URL?

Base64URL описан в разделе 5 RFC 4648 как «Base 64 Encoding with URL and Filename Safe Alphabet», то есть кодирование Base64 с алфавитом, безопасным для URL и имён файлов. Он работает точно так же, как стандартный Base64, по 6 бит на символ, но заменяет два символа, которые вызывают проблемы в URL и путях к файлам:

Стандартный Base64Base64URL
Значение 62+-
Значение 63/_
Дополнение=, обязательнообычно опускается

В URL символ + может быть прочитан как пробел, / разделяет сегменты пути, а = отделяет имена параметров запроса от значений, поэтому стандартный Base64 перед вставкой в ссылку приходится экранировать с помощью процентного кодирования (percent-encoding). Base64URL не требует экранирования. RFC 4648 разрешает опускать дополнение, если длина известна из контекста, и большинство спецификаций на основе Base64URL так и поступают.

Где используется Base64URL

  • JSON Web Token. Заголовок, полезная нагрузка и подпись JWT кодируются в Base64URL без дополнения (RFC 7515). Прочитать токен можно с помощью декодера JWT.
  • OAuth 2.0 PKCE. Значение code_challenge — это хеш SHA-256 от code verifier, записанный в Base64URL без дополнения (RFC 7636), поэтому его длина всегда составляет 43 символа.
  • JSON Web Key и WebAuthn. Параметры ключей, например n, e, x и y, а также challenge и идентификаторы учётных данных WebAuthn передаются в Base64URL.
  • Токены, идентификаторы и имена файлов. Ссылки для сброса пароля, подписанные URL и ключи кеша содержат Base64URL без экранирования; случайный 16-байтовый идентификатор превращается в 22 символа. В файловых системах, не учитывающих регистр, лучше использовать Base32, потому что Base64URL зависит от регистра букв.

Преобразование между Base64 и Base64URL

Оба варианта кодируют одни и те же байты, поэтому преобразование сводится к замене символов: замените + на -, / на _ и удалите = в конце. Для обратного преобразования снова поменяйте символы и добавляйте =, пока длина не станет кратной 4. Декодер на этой странице принимает оба алфавита, с дополнением и без него.

// Node.js 16+
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')

# Python (urlsafe_b64encode сохраняет дополнение)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)

Спецификация

АлфавитA-Z a-z 0-9 - _
Размер результата4 символа на каждые 3 байта (около 133%)
ДополнениеНеобязательно, обычно опускается
СтандартRFC 4648, раздел 5
Учёт регистраДа

Примеры

Исходные данные (UTF-8)Результат
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

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

Base64URL — это то же самое, что URL-кодирование строки Base64?
Нет. При процентном кодировании стандартного Base64 символы +, / и = превращаются в %2B, %2F и %3D, и строка становится длиннее. В Base64URL используется другой алфавит, поэтому экранирование вообще не требуется. Без преобразования эти две формы не взаимозаменяемы.
Нужно ли дополнение в Base64URL?
Это зависит от получателя. JWT, JSON Web Key и PKCE требуют опускать дополнение, а urlsafe_b64encode в Python и стандартный URL-кодировщик в Java добавляют его. Если сомневаетесь, опускайте его: этот декодер принимает обе формы.
Почему стандартный декодер Base64 отклоняет мою строку Base64URL?
Строгие стандартные декодеры не принимают - и _, а некоторые требуют дополнения. Замените символы и добавьте знаки =, чтобы длина стала кратной 4, или декодируйте строку здесь.
Как проверить code challenge в PKCE?
Значение challenge — это BASE64URL(SHA256(code_verifier)) без дополнения. Декодируйте его здесь с выводом в Hex: правильное значение даёт ровно 32 байта, которые можно сравнить с хешем SHA-256 от verifier.