Загрузить файл
  1. base64hub
  2. Веб и токены
  3. Base64 в Base64URL

Конвертер Base64 в Base64URL (URL-safe)

Вставьте стандартный Base64 и получите URL-safe вариант: + превращается в -, / в _, а дополнение = убирается, если не отметить Дополнение (=).

Бесплатно без регистрации и ограничений Локально ничего не загружается Обновлено 27 окт. 2026 г.
Ввод 0Байты 0 BРезультат 0

Обработка идёт в браузере. Эта страница не может никуда отправить ваши данные – откуда мы это знаем

Как перевести Base64 в Base64URL

  1. Вставьте Base64 в поле Ввод · Base64. Переносы строк из Base64 с разбивкой и префикс data:...;base64, удаляются автоматически.
  2. URL-safe строка появится в поле Результат · Base64URL.
  3. Если получателю нужно = в конце, отметьте Дополнение (=) под результатом.
  4. Нажмите Скопировать результат. Переключатель Base64URL → Base64 или страница Base64URL в Base64 переводят обратно.

Инструмент декодирует ввод в байты и кодирует их заново. Поэтому некорректный Base64 даёт ошибку, а наполовину преобразованного результата не бывает.

Примеры

Base64Base64URLПримечание
PDw/Pz8+Pg==PDw_Pz8-Pg/ и + заменены, == удалено
eyJyb2xlIjoiYWRtaW4+In0=eyJyb2xlIjoiYWRtaW4-In0JSON с символом >, удалён один =
E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw+cM=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cMchallenge PKCE из приложения B к RFC 7636
+/8=-_8байты fb ff
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9без изменений: нет +, / и =

Последний случай встречается часто. Короткий JSON и ASCII-текст нередко кодируются без + и /, а если длина кратна 3 байтам, то и без дополнения, и тогда оба варианта совпадают. Поэтому забытое преобразование может не проявиться на тестах, пока какое-нибудь значение случайно не даст + или /.

Почему URL нужен другой алфавит

Три символа стандартного Base64 имеют в URL особый смысл:

  • + в строке запроса означает пробел, поэтому ?t=a+b во многих фреймворках приходит как a b.
  • / разделяет сегменты пути, так что Base64 в пути может разрезаться на части или попасть не в тот маршрут.
  • = отделяет имя параметра запроса от значения, и для надёжности его нужно записывать как %3D.

Раздел 5 RFC 4648 определяет Base64URL как раз для этого: - и _ заменяют + и /, а дополнение можно опустить. Такие значения безопасны в путях, строках запроса, cookie и именах файлов без всякого экранирования. Подробности в статье Base64 и Base64URL.

Где обязателен Base64URL

  • JWT и JWS. Каждый сегмент JSON Web Token записан в Base64URL без дополнения. Их читает декодер JWT, а формат объясняется в статье Base64 в JWT.
  • OAuth PKCE. code_challenge получают как Base64URL от дайджеста SHA-256 строки verifier, без дополнения. Инструменты хеширования часто выдают стандартный Base64, так что это преобразование остаётся последним шагом.
  • WebAuthn и JWK. ID учётных данных, challenge и параметры ключа в JSON Web Key записываются в Base64URL.
  • Подписанные URL и токены в ссылках, например в ссылках для сброса пароля или скачивания, где значение стоит в пути или строке запроса.

Чтобы закодировать текст сразу в Base64URL, минуя стандартный вариант, используйте кодировщик Base64URL.

Base64 в Base64URL в коде

import base64
base64.urlsafe_b64encode(b"<<???>>").rstrip(b"=").decode()   # 'PDw_Pz8-Pg'
Buffer.from("PDw/Pz8+Pg==", "base64").toString("base64url");   // 'PDw_Pz8-Pg'
"PDw/Pz8+Pg==".replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");   // same, without Buffer

urlsafe_b64encode в Python сохраняет дополнение, отсюда rstrip. Кодировка "base64url" в Node его отбрасывает. Подробнее в руководствах по Python и Node.js.

Вопросы и ответы

Меняются ли данные при переводе в Base64URL?

Нет. Оба алфавита кодируют одни и те же байты, различаются только два символа и дополнение. Декодирование любого из вариантов даёт одинаковые байты.

Оставлять ли дополнение = в Base64URL?

Смотрите, что ждёт получатель. JWT (RFC 7515) и PKCE (RFC 7636) требуют обходиться без дополнения. Некоторые библиотеки принимают оба варианта, а отдельные старые декодеры без него не работают. Для них отметьте Дополнение (=).

Можно ли перевести Base64 в Base64URL регулярным выражением?

Да: в JavaScript это s.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""). Выражение рассчитано на одну чистую строку; если данные пришли из PEM-файла или письма, сначала уберите переносы строк.

Почему бы просто не закодировать стандартный Base64 в percent-encoding?

Так тоже можно, но +, / и = превращаются в %2B, %2F и %3D, по три символа на каждый, а некоторые системы декодируют URL дважды или считают + пробелом. Base64URL избавляет от всего этого.