Что такое Base64 и зачем он нужен

Простое объяснение кодировки Base64: как работает, где применяется, примеры использования в веб-разработке и API.

Base64 — одна из тех вещей, которые разработчики используют постоянно, но редко задумываются, как это работает. Разберём кодировку Base64 простыми словами и посмотрим, где она реально нужна.

Base64 простыми словами

Base64 — это способ представить любые данные (включая бинарные) в виде текста из 64 «безопасных» символов:

  • Буквы A-Z (26 символов)
  • Буквы a-z (26 символов)
  • Цифры 0-9 (10 символов)
  • Символы + и / (2 символа)
  • Символ = для выравнивания

Эти 64 символа гарантированно корректно передаются через любые текстовые протоколы, почтовые системы и API.

Пример

Текст Hello в Base64:

Hello → SGVsbG8=

Попробуйте сами в нашем кодировщике Base64.

Как это работает

Алгоритм кодирования:

  1. Берём исходные данные как последовательность байтов
  2. Каждые 3 байта (24 бита) разбиваем на 4 группы по 6 бит
  3. Каждая 6-битная группа (0-63) превращается в символ из алфавита Base64
  4. Если байтов не кратно 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

Вариант Алфавит Применение
StandardA-Z, a-z, 0-9, +, /Email, общее
URL-safeA-Z, a-z, 0-9, -, _URL, JWT
Filename-safeA-Z, a-z, 0-9, -, _Имена файлов

Попробуйте сами

Наш онлайн-конвертер Base64 позволяет:

  • Кодировать текст в Base64
  • Декодировать Base64 обратно
  • Работает с кириллицей и Unicode
  • Мгновенный результат без отправки на сервер

Используйте для тестирования API, отладки JWT токенов или просто чтобы понять, как работает кодировка.