Кодирование и декодирование Base64

RSS

Кодируйте текст в Base64 или декодируйте Base64 обратно в текст с полной поддержкой UTF-8 и URL-безопасным вариантом.

Работает на 100% в вашем браузере. Ничего из вставленного не загружается на сервер и не сохраняется.
Текст или Base64
Результат
Готово.

Как пользоваться кодировщиком и декодером Base64

  1. Выберите Закодировать, чтобы превратить текст в Base64, или Декодировать, чтобы вернуть Base64 обратно в текст.
  2. Вставьте исходные данные. Текст обрабатывается как UTF-8, поэтому буквы с диакритикой, нелатинские алфавиты и эмодзи работают корректно.
  3. Включите опцию URL-безопасный, если результат будет использоваться в URL, имени файла или JWT.
  4. Скопируйте результат.

Кодирование и декодирование выполняются локально в вашем браузере; ничего из того, что вы вставляете, не загружается и не сохраняется.

Как работает Base64

Base64, описанный в RFC 4648, представляет произвольные двоичные данные с помощью 64 печатаемых символов ASCII: A–Z, a–z, 0–9, + и /. Он нужен для того, чтобы двоичное содержимое могло безопасно проходить через системы, рассчитанные на текст, такие как электронная почта, JSON, XML и заголовки HTTP.

Алгоритм берёт входные данные по 3 байта (24 бита) за раз и делит их на четыре 6-битные группы. Каждое 6-битное значение (0–63) выбирает один символ алфавита. Процесс хорошо виден на слове Man:

ШагЗначение
БайтыM=77, a=97, n=110
24 бита01001101 01100001 01101110
6-битные группы010011 010110 000101 101110 = 19, 22, 5, 46
Base64TWFu

Поскольку каждые 3 байта превращаются в 4 символа, результат Base64 примерно на 33% больше исходных данных (плюс переносы строк, если их вставляет формат, например MIME).

Дополнение символом =

Если длина входных данных не кратна трём, последняя группа дополняется (padding). Один оставшийся байт даёт два символа и ==; два оставшихся байта дают три символа и =. Например, Hi кодируется как SGk=.

URL-безопасный Base64

Стандартные символы + и / имеют особое значение в URL и путях к файлам. RFC 4648 §5 определяет алфавит base64url, в котором они заменены на - и _. Дополнение часто опускается. В JSON Web Token используется base64url без дополнения.

Стандартный:     +/8=
URL-безопасный:  -_8

Типичные ошибки

Base64 — это не шифрование

Любой может мгновенно декодировать Base64: ключа нет. Никогда не используйте его, чтобы «спрятать» пароли или ключи API. Для проверки целостности используйте хеш, полученный в генератора хешей, а для конфиденциальности — настоящее шифрование.

UTF-8 в JavaScript

Встроенная в браузер функция btoa() принимает только символы из диапазона Latin-1 и выдаёт ошибку на всех остальных. Сначала преобразуйте текст в байты UTF-8:

btoa("✓");   // InvalidCharacterError

const bytes = new TextEncoder().encode("✓");
btoa(String.fromCharCode(...bytes));   // "4pyT"

Смешение алфавитов

Декодирование данных base64url строгим стандартным декодером завершается ошибкой на символах - и _ или при отсутствии дополнения. Перед декодированием замените алфавит и снова добавьте дополнение до длины, кратной четырём символам.

Где встречается Base64

  • Data URI встраивают небольшие файлы прямо в HTML или CSS: data:image/png;base64,iVBORw0KGgo...
  • Базовая HTTP-аутентификация (Basic) отправляет username:password в кодировке Base64. user:pass превращается в Authorization: Basic dXNlcjpwYXNz, что элементарно декодируется, поэтому Basic auth можно использовать только через HTTPS. Такие заголовки можно изучить с помощью проверки HTTP-заголовков.
  • Вложения электронной почты (MIME), а также сертификаты и ключи PEM.
  • JWT, заголовок и полезная нагрузка которых — это JSON в кодировке base64url. Прочитать их поможет декодер JWT.
Совет: в командной строке printf 'text' | base64 кодирует, а base64 -d декодирует (в старых версиях macOS используется -D). Используйте printf или echo -n, чтобы не закодировать заодно и завершающий перевод строки.

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

Почему моя строка Base64 заканчивается на = или ==?

Это дополнение. Оно сообщает декодеру, сколько байт было в последней группе, если длина входных данных не делилась на три.

Безопасен ли Base64?

Нет. Это кодирование, а не шифрование. Оно вообще не обеспечивает конфиденциальности, а лишь делает двоичные данные пригодными для передачи в виде текста.

Почему закодированный результат больше исходных данных?

Каждый символ Base64 несёт 6 бит вместо 8, поэтому на 3 входных байта нужно 4 выходных символа — накладные расходы составляют примерно треть.

Чем Base64 отличается от base64url?

Различаются только два символа: base64url использует - и _ вместо + и / и обычно отбрасывает дополнение =, поэтому результат можно вставлять в URL без дополнительного экранирования.

Обновлено

Скопировано в буфер обмена