Кладовочка

О разном, чтобы было под рукой онлайн

Base64 — что это, как работает, примеры

Что такое Base64

Base64 — это способ представления бинарных данных в текстовом виде. Название происходит от того, что алфавит кодирования состоит из 64 символов: латинские буквы A-Z и a-z (52 символа), цифры 0-9 (10 символов) и два специальных знака + и /.

Главная идея: представить любые данные — изображение, PDF, аудио, бинарный протокол — как строку из безопасных ASCII-символов, которую можно передать по любым текстовым каналам. Base64 не уменьшает размер данных, а наоборот, увеличивает его примерно на 33%. Это не сжатие, а транспортное кодирование.

Как работает кодирование

Алгоритм группирует входные байты по три (24 бита) и делит их на четыре группы по 6 бит. Каждая 6-битная группа кодируется одним символом из 64-значного алфавита.

Входной текст:           M        a        n
ASCII (hex):            4D       61       6E
Биты:             01001101 01100001 01101110
Разбивка по 6:    010011   010110   000101   101110
Индексы:            19       22       5        46
Base64 символы:      T        W       F        u
Результат: "TWFu"

Таблица соответствия: 0-25 → A-Z, 26-51 → a-z, 52-61 → 0-9, 62 → +, 63 → /.

Padding (выравнивание). Если количество входных байт не кратно трём, в конец добавляются символы =. Один байт → два символа Base64 + ==. Два байта → три символа Base64 + =.

"Ma"  → 01001101 01100001 → разбивка: 010011  010110  0001(00)
        → 19 22 4(всего 4 бита — заполняем нулями)
        → T  W  E  =
        → "TWE="

"M"   → 01001101 → разбивка: 010011  01(0000)
        → T Q = =
        → "TQ=="

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

Data URL — встраивание изображений прямо в HTML или CSS. Вместо загрузки отдельного файла картинка кодируется и вставляется как строка:

<img src="data:image/png;base64,iVBORw0KGgo..." />

Data URL удобны для мелких иконок — они не требуют дополнительных HTTP-запросов. Для больших изображений лучше использовать обычные ссылки, поскольку Base64 увеличивает размер на 33%, а gzip-сжатие сервера с обычными файлами работает эффективнее.

Email-вложения (MIME). Почтовые протоколы исторически поддерживают только текст. Чтобы отправить бинарный файл, он кодируется в Base64 и помещается в тело письма с заголовком Content-Transfer-Encoding: base64.

Basic HTTP Authentication. Заголовок Authorization: Basic <credentials> содержит пару логин:пароль, закодированную в Base64. Важно: это не шифрование — любой, кто перехватит запрос, раскодирует пароль. Basic Auth имеет смысл только поверх HTTPS.

JSON и YAML. Если нужно передать бинарные данные в текстовом формате, их кодируют в Base64-строку. Например, Docker-образы хранят слои в JSON-манифестах с Base64-представлением хешей.

Хранение бинарных данных в базах. Некоторые NoSQL-базы и key-value хранилища предпочитают текстовые значения. Base64 позволяет сохранить бинарный объект как строку.

JWT-токены. Заголовок и полезная нагрузка JWT кодируются в Base64URL — вариант Base64, оптимизированный для передачи в URL.

Примеры кодирования и декодирования

Linux / Mac — командная строка:

# Кодировать строку
echo -n "Hello World!" | base64
# → SGVsbG8gV29ybGQh

# Кодировать файл
base64 image.jpg > image.b64

# Декодировать
echo "SGVsbG8gV29ybGQh" | base64 -d
# → Hello World!

# Декодировать в файл
base64 -d image.b64 > image.jpg

Python:

import base64

# Кодирование
encoded = base64.b64encode(b"Hello World!").decode()
# → SGVsbG8gV29ybGQh

# Декодирование
decoded = base64.b64decode("SGVsbG8gV29ybGQh")
# → b'Hello World!'

JavaScript (браузер и Node.js):

// Кодирование
btoa("Hello World!")
// → "SGVsbG8gV29ybGQh"

// Декодирование
atob("SGVsbG8gV29ybGQh")
// → "Hello World!"

Для Unicode-строк необходимо сначала преобразовать в UTF-8 байты — btoa и atob работают только с Latin1.

Base64 vs Base64URL

Стандартный Base64 использует символы +, / и =, которые имеют специальное значение в URL. + — это пробел, / — разделитель пути, = — разделитель параметров.

Base64URL заменяет эти символы: + → -, / → _, и убирает завершающие =. Это делает строку безопасной для передачи в URL-параметрах и JWT-токенах.

Стандартный:  dXNlcjpwYXNzd29yZA==
Base64URL:     dXNlcjpwYXNzd29yZA

При декодировании Base64URL нужно восстановить padding и заменить символы обратно. Большинство библиотек имеют встроенную поддержку:

base64.urlsafe_b64encode(b"user:password").decode()
base64.urlsafe_b64decode("dXNlcjpwYXNzd29yZA")

Попробовать инструмент

Кодировать и декодировать Base64, а также Base64URL можно в нашем онлайн-инструменте на txtly.ru — просто вставьте текст или загрузите файл и получите результат мгновенно.