Кодирование Base64: что это такое и когда использовать
Понятное руководство по Base64 — как оно работает, реальные сценарии применения и как бесплатно кодировать и декодировать строки в браузере.
Base64 встречается везде в веб-разработке — в JWT-токенах, data URI, вложениях электронной почты и заголовках API-аутентификации. Разберём, что это такое, как работает и когда это действительно нужно.
Что такое Base64?
Base64 — схема кодирования, которая преобразует двоичные данные в строку из 64 печатаемых ASCII-символов: A–Z, a–z, 0–9, + и /. Символ = используется как заполнитель в конце.
Название происходит из математики: каждая цифра Base64 представляет 6 бит (2⁶ = 64). Три байта входных данных (24 бита) превращаются в четыре символа Base64 (4 × 6 = 24 бита). Плата за это — размер: выходные данные всегда примерно на 33% больше оригинала.
Входные данные: "Привет"
Base64: 0J/RgNC40LLQtdGC
Такой прирост размера оправдан, когда система получателя принимает только текст.
Реальные сценарии использования
Data URI в HTML и CSS
Вместо ссылки на внешний файл можно встроить небольшое изображение прямо в HTML или стили:
<img src="data:image/png;base64,iVBORw0KGgo...">
background-image: url("data:image/svg+xml;base64,PHN2Zy...");
Это убирает один HTTP-запрос — важно для маленьких иконок и контента выше линии сгиба. Для крупных изображений прирост размера обычно перевешивает выгоду.
Тела JSON API с двоичными данными
JSON поддерживает только текст. Чтобы включить PDF, изображение или аудиофайл в тело JSON, их кодируют в Base64:
{
"filename": "report.pdf",
"content": "JVBERi0xLjQK..."
}
Это распространено в API загрузки документов и вебхуках, передающих вложения.
HTTP Basic Authentication
Заголовок Authorization: Basic кодирует учётные данные в Base64:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Это username:password — декодируйте, и получите открытый текст. Это не шифрование. Любой, кто перехватит заголовок, прочитает его. С Basic Auth всегда используйте HTTPS.
JWT-токены
JSON Web Tokens используют Base64URL — URL-безопасный вариант, где + заменяется на -, а / на _ — для заголовка и полезной нагрузки. Вы можете декодировать полезную нагрузку любого JWT и прочитать его поля без знания секрета. Подделку предотвращает подпись, а не кодирование.
Хранение двоичных данных в текстовых полях
Базы данных и конфигурационные файлы, принимающие только строки, хранят двоичные данные в Base64. Криптографические ключи, сертификаты и небольшие иконки нередко оказываются закодированными именно так — в переменных окружения или YAML-конфигах.
Base64 — это не шифрование
Стоит сказать прямо. Base64 — кодирование, обратимое преобразование без секретного ключа. Любой инструмент, включая этот, декодирует строку Base64 за миллисекунды. Не используйте его, чтобы скрыть или защитить чувствительные данные.
Для реальной защиты:
- AES или ChaCha20 для симметричного шифрования
- RSA или ECDSA для асимметричных операций
- bcrypt, Argon2 или PBKDF2 для хэширования паролей
Как наш кодировщик обрабатывает Unicode
Встроенная функция браузера btoa() принимает только символы Latin-1. Чтобы работать с эмодзи, кириллицей, иероглифами и другим текстом Unicode, наш кодировщик Base64 использует TextEncoder для предварительного преобразования строки в байты UTF-8, а затем кодирует эти байты. Это соответствует поведению серверных реализаций на Python и Node.js, так что закодированные строки будут совместимы.
Попробуйте Base64 кодировщик и декодировщик — кодируйте любой текст или декодируйте любую строку Base64 прямо в браузере, без передачи данных куда-либо.