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 — просто вставьте текст или загрузите файл и получите результат мгновенно.