кодирование | декодирование | сжатие

> base64url | jwt | url-safe <

// Base64url — вариант Base64 без заполнения, безопасный для URL и имён файлов

[URL-SAFE]

Совместимость с URL

Нет специальных символов URL — безопасно для query‑параметров и путей.

[JWT]

Стандарт JWT

Используется в JSON Web Tokens и спецификациях OAuth 2.0.

[NO-PADDING]

Необязательное заполнение

Символы заполнения (=) можно опустить для более «чистых» URL.

>> техническая информация

Как работает Base64url:

Base64url — это вариант Base64, который заменяет "+" на "-", а "/" на "_", делая результат безопасным для URL и имён файлов. Символ заполнения "=" часто опускают, так как он может вызывать проблемы в адресной строке.

Сравнение:

Base64: SGVsbG8+Pw== Base64url: SGVsbG8-Pw

Зачем использовать Base64url:

  • >JWT‑токены
  • >Потоки OAuth 2.0
  • >Параметры запроса в URL
  • >Кодирование имён файлов
  • >Подписи Web‑API

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

Что такое Base64url?

Base64url — это вариант кодирования Base64, безопасный для URL и имён файлов. Он заменяет "+" на "-", "/" на "_" и при необходимости удаляет символы заполнения "=", чтобы избежать проблем с URL‑кодированием.

Почему нельзя использовать обычный Base64 в URL?

Обычный Base64 использует символы "+", "/" и "=", которые имеют особое значение в URL. "+" может интерпретироваться как пробел, "/" является разделителем пути, а "=" используется для параметров, что приводит к ошибкам разбора.

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

Base64url широко применяется в JWT (JSON Web Tokens), кодах авторизации OAuth 2.0, утверждениях SAML и в любых API, где требуется передавать бинарные данные в URL или заголовках HTTP.

Обязательно ли использовать заполнение в Base64url?

Нет, заполнение в Base64url является опциональным. Многие реализации его опускают, поскольку длину можно вычислить. В частности, спецификации JWT требуют отсутствия padding для более компактных URL.

// Отличия от Base64

Base64Base64url
+-
/_
=—

// Base64url в коде

JavaScript   btoa(s).replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,'')
Node.js      Buffer.from(s).toString('base64url')
Python       base64.urlsafe_b64encode(b).rstrip(b'=')
Go           base64.RawURLEncoding.EncodeToString(b)
Padding      s + '=' * (-len(s) % 4)

>> Другие вопросы

В: Почему в Base64url нет «=»?

О: Дополнение можно вычислить по длине, а «=» имеет особый смысл в URL и строках запроса. Поэтому JWT (RFC 7515) и многие API записывают Base64url без заполнения.

В: Как восстановить заполнение перед декодированием?

О: Посмотрите длину по модулю 4: остаток 2 → добавьте ==, остаток 3 → добавьте =, остаток 0 → ничего. Остаток 1 недопустим. Также замените - на +, а _ на /.

В: Base64url — это шифрование?

О: Нет, это лишь кодирование: любой может его обратить. Содержимое payload в JWT читаемо, поэтому не храните там секреты.

Другие языки