Base64 — одна из тех вещей, которые разработчики используют постоянно, но редко задумываются, как это работает. Разберём кодировку Base64 простыми словами и посмотрим, где она реально нужна.
Base64 простыми словами
Base64 — это способ представить любые данные (включая бинарные) в виде текста из 64 «безопасных» символов:
- Буквы A-Z (26 символов)
- Буквы a-z (26 символов)
- Цифры 0-9 (10 символов)
- Символы + и / (2 символа)
- Символ = для выравнивания
Эти 64 символа гарантированно корректно передаются через любые текстовые протоколы, почтовые системы и API.
Пример
Текст Hello в Base64:
Hello → SGVsbG8= Попробуйте сами в нашем кодировщике Base64.
Как это работает
Алгоритм кодирования:
- Берём исходные данные как последовательность байтов
- Каждые 3 байта (24 бита) разбиваем на 4 группы по 6 бит
- Каждая 6-битная группа (0-63) превращается в символ из алфавита Base64
- Если байтов не кратно 3, добавляем символы
=для выравнивания
Именно поэтому Base64 увеличивает размер данных примерно на 33% — три байта превращаются в четыре символа.
Где применяется Base64
1. Data URI в HTML/CSS
Встраивание изображений прямо в код без отдельных файлов:
<img src="data:image/png;base64,iVBORw0KGgo..." />
.icon {
background-image: url(data:image/svg+xml;base64,PHN2Zy...);
} Плюсы: меньше HTTP-запросов, всё в одном файле
Минусы: увеличивает размер HTML/CSS, не кэшируется отдельно
2. JSON API
JSON не поддерживает бинарные данные напрямую. Base64 решает эту проблему:
{
"filename": "document.pdf",
"content": "JVBERi0xLjQKJeLjz9MKMyAwIG9...",
"content_type": "application/pdf"
} 3. Email (MIME)
Почтовые протоколы изначально поддерживали только 7-битный ASCII. Вложения кодируются в Base64:
Content-Type: application/pdf
Content-Transfer-Encoding: base64
JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL... 4. Basic Authentication
HTTP Basic Auth передаёт логин и пароль в Base64:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= Где dXNlcm5hbWU6cGFzc3dvcmQ= — это username:password в Base64.
Base64 — это НЕ шифрование! Данные легко декодируются обратно. Для защиты паролей используйте HTTPS и хэширование.
5. JWT токены
JSON Web Token состоит из трёх частей в Base64URL:
eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiam9obiJ9.signature Base64URL — вариант Base64, где + заменён на -, а / на _ для безопасного использования в URL.
6. Хранение в базах данных
Небольшие бинарные данные (иконки, подписи) можно хранить как текст:
INSERT INTO users (avatar) VALUES ('iVBORw0KGgoAAAANSUhEU...'); Когда НЕ использовать Base64
❌ Большие файлы
Base64 увеличивает размер на 33%. Для больших файлов лучше:
- Отдельные URL с прямой загрузкой
- Multipart upload
- Бинарные протоколы (gRPC, WebSocket)
❌ Шифрование данных
Base64 не защищает данные. Любой может декодировать. Для безопасности используйте:
- AES шифрование
- HTTPS для передачи
- Хэширование для паролей
❌ Сжатие
Base64 увеличивает размер, а не уменьшает. Для сжатия используйте gzip, Brotli.
Base64 в JavaScript
Встроенные функции браузера:
// Кодирование
const encoded = btoa('Hello World');
// SGVsbG8gV29ybGQ=
// Декодирование
const decoded = atob('SGVsbG8gV29ybGQ=');
// Hello World Для Unicode (кириллица и т.д.):
// Кодирование UTF-8
const encoded = btoa(unescape(encodeURIComponent('Привет')));
// Декодирование UTF-8
const decoded = decodeURIComponent(escape(atob(encoded))); Base64 в Python
import base64
# Кодирование
encoded = base64.b64encode(b'Hello World')
# b'SGVsbG8gV29ybGQ='
# Декодирование
decoded = base64.b64decode('SGVsbG8gV29ybGQ=')
# b'Hello World' Base64 в командной строке
# Linux/Mac
echo -n 'Hello' | base64
# SGVsbG8=
echo 'SGVsbG8=' | base64 -d
# Hello
# Кодирование файла
base64 image.png > image.txt Варианты Base64
| Вариант | Алфавит | Применение |
|---|---|---|
| Standard | A-Z, a-z, 0-9, +, / | Email, общее |
| URL-safe | A-Z, a-z, 0-9, -, _ | URL, JWT |
| Filename-safe | A-Z, a-z, 0-9, -, _ | Имена файлов |
Попробуйте сами
Наш онлайн-конвертер Base64 позволяет:
- Кодировать текст в Base64
- Декодировать Base64 обратно
- Работает с кириллицей и Unicode
- Мгновенный результат без отправки на сервер
Используйте для тестирования API, отладки JWT токенов или просто чтобы понять, как работает кодировка.