Что такое кодирование Base64? Полное руководство с примерами
Узнайте, что такое кодирование Base64, зачем оно нужно, где используется и как мгновенно кодировать и декодировать строки Base64 в браузере — без установки программ.
Откройте любое современное веб-приложение, изучите HTTP-запрос, взгляните на манифест Kubernetes или загляните внутрь JWT-токена — Base64 повсюду. Это одна из тех фундаментальных схем кодирования, с которыми разработчики сталкиваются постоянно, но редко останавливаются, чтобы полностью её понять. Это руководство объясняет, что такое Base64, как он работает на уровне байтов, где используется в реальных системах и когда вам стоит (и не стоит) к нему обращаться.
Вы можете мгновенно кодировать и декодировать любую строку Base64 с помощью кодировщика/декодировщика Base64 BrowseryTools — бесплатно, без регистрации, и ничто никогда не покидает ваш браузер.
Зачем существует Base64?
Чтобы понять Base64, нужно понять проблему, которую он решает. На заре интернета многие протоколы связи — особенно электронная почта — были спроектированы вокруг 7-битного текста ASCII. ASCII определяет 128 символов с использованием 7 бит на символ. Двоичные данные (изображения, документы, исполняемые файлы) используют все 8 бит на байт, порождая байтовые значения, не имевшие представления в ASCII, которые старые системы отбрасывали, искажали или интерпретировали как управляющие команды.
Стандарту MIME (Multipurpose Internet Mail Extensions), представленному в 1991 году, чтобы позволить почте нести вложения, был нужен способ передавать произвольные двоичные данные через эти «7-битно-чистые» каналы. Решением было перекодировать двоичные данные с использованием лишь безопасного подмножества печатаемых символов ASCII — такого, на котором сходились все системы и который верно передавали. Base64 стал стандартным кодированием для этой цели, и название описывает подход: использовать набор из 64 безопасных символов для представления любых двоичных данных.
Алфавит из 64 символов
Base64 использует ровно 64 символа, поэтому 6 бит входных данных всегда могут быть представлены одним символом Base64 (26 = 64). Стандартный алфавит, определённый в RFC 4648:
- Прописные буквы от
AдоZ— значения от 0 до 25 - Строчные буквы от
aдоz— значения от 26 до 51 - Цифры от
0до9— значения от 52 до 61 +— значение 62/— значение 63
65-й символ — знак равенства = — используется как заполнение, но не представляет данные. Заполнение гарантирует, что длина закодированного вывода всегда кратна 4 символам, что упрощает декодирование.
Как работает кодирование Base64: 3 байта → 4 символа
Base64 работает, беря 3 байта входных данных (24 бита) и разбивая их на четыре 6-битные группы. Каждая 6-битная группа отображается в один символ алфавита Base64. Поскольку 3 байта становятся 4 символами, кодирование Base64 увеличивает размер данных ровно на треть (33%).
Пройдём по конкретному примеру: кодирование ASCII-строки "Man".
Шаг 1 — преобразуем каждый символ в его байтовое значение ASCII, а затем в двоичный вид:
M= ASCII 77 =01001101a= ASCII 97 =01100001n= ASCII 110 =01101110
Шаг 2 — объединяем 24 бита в один поток:
01001101 01100001 01101110 ↓ (concatenate all 24 bits) 010011 010110 000101 101110
Шаг 3 — отображаем каждую 6-битную группу в алфавит Base64:
| 6-битная группа | Десятичное значение | Символ Base64 |
|---|---|---|
010011 | 19 | T |
010110 | 22 | W |
000101 | 5 | F |
101110 | 46 | u |
Кодирование Base64 для "Man" — это TWFu. Вы можете проверить это с помощью инструмента Base64 BrowseryTools. Когда длина входных данных не кратна 3, добавляются символы заполнения (= или ==), чтобы привести вывод к кратности 4 символам. Например, "Ma" кодируется как TWE=, а "M" кодируется как TQ==.
Распространённые сценарии применения
Встраивание изображений в HTML и CSS
Вместо отдельного HTTP-запроса за маленьким изображением или иконкой вы можете встроить его прямо в HTML или CSS как data URI. Браузер декодирует строку Base64 и отрисовывает изображение без обращения к сети. Это полезно для маленьких ресурсов вроде favicon, индикаторов загрузки или встроенных иконок в email-шаблонах, где загрузка внешних URL может быть заблокирована.
/* CSS example — embedding a small PNG icon */
.icon {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA...');
}Двоичные данные в JSON-API
JSON — это текстовый формат. Если API нужно передать двоичные данные — файл, криптографический ключ, подпись, изображение — внутри JSON-полезной нагрузки, он не может включить сырые байты. Кодирование двоичных данных в Base64 превращает их в обычную строку, которую JSON может нести без проблем. Многие API, возвращающие содержимое файлов, аудиосэмплы или изображения в JSON-ответах, используют этот подход.
HTTP Basic Authentication
Схема HTTP Basic Auth отправляет учётные данные в заголовке Authorization как кодирование Base64 от username:password. Например, учётные данные admin:secret становятся строкой YWRtaW46c2VjcmV0, а полный заголовок выглядит так:
Authorization: Basic YWRtaW46c2VjcmV0
Это не зашифровано — это просто закодировано. Basic Auth всегда нужно использовать поверх HTTPS, никогда по обычному HTTP, потому что учётные данные может тривиально декодировать любой, кто перехватит запрос.
Полезные нагрузки JWT
JSON Web Tokens кодируют свой заголовок и полезную нагрузку с помощью Base64URL (URL-безопасного варианта, описанного ниже). Утверждения токена — ID пользователя, время истечения, роли — хранятся в полезной нагрузке как объект JSON в кодировке Base64URL. Опять же, это не шифрование: полезная нагрузка полностью читаема любым, у кого есть токен.
Секреты Kubernetes
Kubernetes хранит значения Secret как строки в кодировке Base64 в YAML-манифестах. Вот реальный пример Secret в Kubernetes:
apiVersion: v1 kind: Secret metadata: name: db-credentials type: Opaque data: username: YWRtaW4= password: cGFzc3dvcmQxMjM=
Чтобы узнать, чем на самом деле являются эти значения, вставьте YWRtaW4= в декодировщик Base64 BrowseryTools. Результат — admin. Вставьте cGFzc3dvcmQxMjM= и получите password123. Kubernetes кодирует значения секретов в Base64 для безопасного форматирования YAML, а не ради безопасности — реальная безопасность исходит из RBAC Kubernetes и шифрования при хранении, а не из самого кодирования.
Вариант Base64URL
Стандартный Base64 использует два символа, особых для URL: + (который означает пробел в кодировании форм) и / (который является разделителем пути). Когда данным в кодировке Base64 нужно появиться в URL, параметре запроса или имени файла, эти символы вызывают проблемы.
Base64URL решает это заменой:
+заменяется на-(дефис)/заменяется на_(подчёркивание)- Завершающее заполнение
=часто опускается
Base64URL используется в JWT, OAuth-токенах и любом контексте, где закодированная строка должна пережить передачу по URL без процентного кодирования. Инструмент Base64 BrowseryTools поддерживает оба варианта — стандартный и URL-безопасный.
Когда НЕ стоит использовать Base64
Base64 — правильный инструмент в определённых ситуациях, но его часто применяют неверно. Вот когда его стоит избегать:
- Большие файлы: Base64 увеличивает размер данных на ~33%. Изображение в 10 МБ становится примерно 13,3 МБ при кодировании в Base64. Встраивание больших файлов как data URI или строк Base64 в JSON замедляет разбор, увеличивает потребление памяти и тратит трафик. Используйте прямую передачу файлов или URL объектного хранилища для всего сколько-нибудь нетривиального по размеру.
- Безопасность: никогда не используйте Base64 как меру безопасности. Он обеспечивает нулевую конфиденциальность. Если данные чувствительны, используйте настоящее шифрование (AES-GCM, RSA и т. д.).
- Хранение: хранение двоичных данных как Base64 в столбце БД тратит на 33% больше места по сравнению с хранением сырых байтов в двоичном столбце. Используйте нативные двоичные типы БД (BYTEA в PostgreSQL, BLOB в MySQL) при хранении двоичных данных в масштабе.
Base64 против шестнадцатеричного кодирования: сравнение
| Свойство | Base64 | Hex (Base16) |
|---|---|---|
| Набор символов | A–Z, a–z, 0–9, +, / (64 символа) | 0–9, a–f (16 символов) |
| Накладные расходы по размеру | ~33% больше | ~100% больше (2 символа на байт) |
| Читаемость человеком | Низкая — не распознаётся | Умеренная — читаема на уровне байтов |
| Частые сценарии применения | Вложения почты, JWT, data URI, полезные нагрузки API | Криптографические хеши, контрольные суммы, цветовые коды, MAC-адреса |
| URL-безопасно? | Только с вариантом Base64URL | Да — все символы URL-безопасны |
| Бит на символ | 6 бит | 4 бита |
Используйте Base64, когда нужно компактное кодирование двоичных данных в текст и широта набора символов не создаёт проблем. Используйте hex, когда важен ручной осмотр отдельных байтовых значений — дайджесты хешей, контрольные суммы и криптографические выводы традиционно отображаются в hex именно потому, что каждый hex-символ напрямую соответствует 4 битам, делая границы байтов тривиально видимыми.
Кодирование и декодирование Base64 в коде
Большинство языков предоставляют встроенную поддержку Base64. Вот быстрые однострочники для распространённых окружений:
// JavaScript (browser or Node.js)
btoa("Hello, World!") // → "SGVsbG8sIFdvcmxkIQ=="
atob("SGVsbG8sIFdvcmxkIQ==") // → "Hello, World!"
# Python
import base64
base64.b64encode(b"Hello, World!") # → b'SGVsbG8sIFdvcmxkIQ=='
base64.b64decode(b"SGVsbG8sIFdvcmxkIQ==") # → b'Hello, World!'
# Bash
echo -n "Hello, World!" | base64
echo "SGVsbG8sIFdvcmxkIQ==" | base64 --decodeДля быстрого разового кодирования или декодирования без написания кода инструмент Base64 BrowseryTools — самый быстрый вариант: вставьте строку, выберите кодирование или декодирование, и результат появится мгновенно. Ничто не отправляется на сервер.
Кодируйте и декодируйте Base64 мгновенно
Декодируете ли вы секрет Kubernetes, изучаете полезную нагрузку JWT, создаёте data URI для встроенного изображения или просто любопытствуете, что содержит строка Base64 — кодировщик/декодировщик Base64 BrowseryTools справится с этим в один клик. Вставьте ввод, получите вывод. Без рекламы, без регистрации, без отправки данных с вашего устройства.
Бесплатный кодировщик / декодировщик Base64 — работает на 100% в вашем браузере
Открыть инструмент Base64 →Try the Tools — 100% Free, No Sign-Up
Everything runs in your browser. No uploads. No accounts. No ads.
Explore All Tools →