Tutorial 22 Feb 2026 10 min read

Кодирование Base64: что это такое, как работает и когда использовать

Подробное руководство по кодированию Base64: разберитесь в алгоритме, изучите типичные сценарии использования, такие как data URI, вложения электронной почты и API-токены, и узнайте, когда Base64 — правильный выбор.

Base64 Encoding Explained - Visual Guide

Что такое кодирование Base64?

Base64 — это схема кодирования двоичных данных в текст, которая преобразует двоичные данные в последовательность печатных символов ASCII. Название «Base64» происходит от того, что для представления данных используется набор из 64 символов. Эти 64 символа включают заглавные буквы (A-Z), строчные буквы (a-z), цифры (0-9) и два дополнительных символа, обычно + и /, а символ = используется для дополнения (padding).

Base64 изначально был разработан для передачи двоичных данных по каналам, которые надёжно поддерживают только текстовое содержимое. Представьте его как универсальный переводчик: он берёт любую последовательность байтов — будь то изображение, документ или зашифрованные данные — и превращает её в строку символов, которые могут безопасно передаваться через текстовые протоколы, такие как email (SMTP), HTML, CSS, JSON и XML.

Кодирование определено в RFC 4648, который стандартизирует несколько алфавитов Base-кодирования. Наиболее распространённый вариант в вебе — стандартный алфавит Base64, но существует также URL-безопасный вариант, который заменяет + на - и / на _, чтобы избежать конфликтов с зарезервированными символами URL.

Как работает алгоритм Base64

Понимание алгоритма, лежащего в основе Base64, помогает разобраться в том, что кажется «магическим» преобразованием. Вот пошаговый процесс:

Шаг 1: Преобразование входных данных в двоичный формат

Каждый байт входных данных представляется как 8-битное двоичное число. Например, ASCII-текст Man представляется как:

  • M = 77 в десятичной системе = 01001101 в двоичной
  • a = 97 в десятичной системе = 01100001 в двоичной
  • n = 110 в десятичной системе = 01101110 в двоичной

При объединении получаем 24-битный поток: 010011010110000101101110

Шаг 2: Разделение на 6-битные группы

Вместо обычных 8-битных границ байтов Base64 разделяет двоичный поток на группы по 6 бит. Почему 6 бит? Потому что 26 = 64, что точно соответствует количеству символов в алфавите Base64. Наш 24-битный поток превращается в четыре 6-битные группы:

  • 010011 = 19
  • 010110 = 22
  • 000101 = 5
  • 101110 = 46

Шаг 3: Сопоставление с таблицей символов Base64

Каждое 6-битное значение (0-63) сопоставляется с конкретным символом в алфавите Base64:

Диапазон значенийСимволы
0-25A-Z
26-51a-z
52-610-9
62+
63/

Применяя это к нашим значениям: 19 = T, 22 = W, 5 = F, 46 = u. Таким образом, Man кодируется как TWFu.

Шаг 4: Обработка дополнения (padding)

Когда длина входных данных не кратна 3 байтам, двоичный поток не делится на 6-битные группы поровну. В этом случае к последней группе добавляются нулевые биты, а в выходные данные добавляются символы дополнения =, указывающие, сколько дополнительных байтов было добавлено:

  • 1 байт на входе даёт 2 символа Base64 + дополнение ==
  • 2 байта на входе дают 3 символа Base64 + дополнение =
  • 3 байта на входе дают 4 символа Base64 без дополнения

Например, кодирование только Ma (2 байта) даёт TWE=, а кодирование только M (1 байт) даёт TQ==.

Типичные сценарии использования кодирования Base64

Кодирование Base64 применяется во многих областях современной веб-разработки и программной инженерии. Вот наиболее важные из них:

1. Data URI в HTML и CSS

Data URI позволяют встраивать файлы непосредственно в HTML или CSS с помощью кодирования Base64. Вместо отдельного HTTP-запроса для небольшого изображения вы можете вставить его инлайн:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." />

Это особенно полезно для небольших иконок и декоративных изображений, где устранение HTTP-запроса улучшает скорость загрузки страницы. Однако Base64 увеличивает размер данных примерно на 33%, поэтому этот приём лучше всего подходит для файлов до 2-3 КБ. Вы можете использовать наш конвертер изображений в Base64 для быстрого создания data URI из любого файла изображения.

2. Вложения электронной почты (MIME)

Первоначальное и, пожалуй, исторически наиболее значимое применение Base64 — в электронной почте. Протокол SMTP был разработан для передачи 7-битного текста ASCII, что означает невозможность прямой отправки двоичных файлов — изображений, PDF и документов. MIME (Multipurpose Internet Mail Extensions) использует Base64 для кодирования этих вложений, чтобы они могли безопасно передаваться через почтовые серверы без повреждения данных.

3. Токены аутентификации API

HTTP Basic Authentication кодирует пару имя_пользователя:пароль в Base64 и передаёт её в заголовке Authorization:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

Важно понимать, что это кодирование, а не шифрование. Любой, кто перехватит этот заголовок, сможет мгновенно его декодировать. Именно поэтому Basic Authentication всегда должна использоваться только через HTTPS.

4. JSON Web Tokens (JWT)

JWT — одно из наиболее распространённых применений Base64 в современной веб-разработке. JWT состоит из трёх частей, закодированных в Base64URL и разделённых точками: заголовок, полезная нагрузка и подпись. Например:

eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiam9obiJ9.xyz123...

Заголовок и полезная нагрузка — это объекты JSON, закодированные в Base64URL, которые может декодировать любой. Подпись обеспечивает проверку целостности. Вы можете проверять и декодировать JWT с помощью нашего декодера JWT или генерировать тестовые токены с помощью генератора JWT.

5. Хранение двоичных данных в JSON и XML

JSON и XML — текстовые форматы, которые не поддерживают двоичные данные нативно. Когда необходимо включить двоичное содержимое — криптографический ключ, небольшое изображение или сертификат — кодирование Base64 является стандартным подходом. Многие API возвращают двоичные данные в виде строк Base64 внутри JSON-ответов.

6. Кодирование данных в URL

Стандартный Base64 использует символы, зарезервированные в URL (+, /, =), поэтому URL-безопасный вариант (Base64URL) заменяет их на -, _ и при необходимости убирает дополнение. Это широко используется в OAuth-токенах, подписанных URL и параметрах состояния. Для других задач кодирования URL попробуйте наш инструмент кодировщик/декодировщик URL.

Base64 — это НЕ шифрование

Это один из наиболее важных моментов для понимания, и ошибка, которую допускают даже опытные разработчики: кодирование Base64 не является механизмом безопасности. Оно не обеспечивает абсолютно никакой конфиденциальности.

Вот почему это различие важно:

  • Кодирование (encoding) преобразует данные из одного формата в другой для совместимости. Оно полностью обратимо кем угодно, без ключа или секрета.
  • Шифрование (encryption) преобразует данные для предотвращения несанкционированного доступа. Для обратного преобразования требуется ключ, и оно спроектировано так, чтобы быть вычислительно невозможным без этого ключа.

Если кто-то даст вам строку Base64, вы сможете декодировать её мгновенно. Никакого ключа, пароля или секрета. Попробуйте сами с нашим кодировщиком/декодировщиком Base64: вставьте любую строку Base64, и вы сразу увидите исходные данные.

Никогда не храните пароли, API-ключи или конфиденциальные данные, используя только кодирование Base64. Если вам нужно настоящее шифрование, используйте алгоритмы вроде AES-256. Вы можете поэкспериментировать с нашим инструментом шифрования AES, чтобы увидеть разницу между кодированием и шифрованием. Для хеширования паролей рассмотрите использование специализированных алгоритмов: bcrypt, scrypt или Argon2.

Накладные расходы на размер: почему данные увеличиваются на 33%

Кодирование Base64 всегда увеличивает размер данных. Причина математическая: каждые 3 байта (24 бита) входных данных превращаются в 4 символа (32 бита) выходных. Это означает, что закодированные данные примерно на 33% больше оригинала.

Краткая справка по увеличению размера:

Исходный размерРазмер в Base64Увеличение
1 КБ~1,37 КБ+37%
10 КБ~13,3 КБ+33%
100 КБ~133 КБ+33%
1 МБ~1,33 МБ+33%

Эти накладные расходы важно учитывать при встраивании изображений как data URI. Изображение размером 50 КБ станет примерно 67 КБ в кодировке Base64, и эта строка будет вставлена непосредственно в ваш HTML или CSS, увеличивая размер документа и потенциально замедляя его разбор.

Когда НЕ следует использовать Base64

Знать, когда избегать Base64, не менее важно, чем знать, когда его использовать. Вот распространённые ситуации, в которых Base64 — неправильный выбор:

  • Большие файлы: Встраивание изображения размером 500 КБ как data URI увеличивает размер HTML-документа примерно на 667 КБ, лишает возможности кэширования и замедляет рендеринг страницы. Подавайте большие файлы как отдельные ресурсы.
  • Безопасность: Как было сказано выше, никогда не используйте Base64 как средство защиты. Оно тривиально обратимо.
  • Хранение в базе данных: Хранение больших двоичных данных в виде Base64 в столбце базы данных тратит на 33% больше места. Используйте нативные типы BLOB/BYTEA.
  • Потоковые данные: Base64 требует наличия всех входных данных перед кодированием (из-за группировки по 3 байта). Для потоковых сценариев лучше подходят chunked transfer encoding или двоичные протоколы.
  • Критичные по производительности пути: Кодирование и декодирование Base64 требуют ресурсов CPU. В системах с высокой пропускной способностью, обрабатывающих миллионы операций в секунду, накладные расходы могут стать существенными.

Практические примеры с кодом

Вот краткие примеры кодирования и декодирования Base64 на популярных языках программирования:

JavaScript (браузер и Node.js)

// Encoding
const encoded = btoa("Hello, World!");
console.log(encoded); // "SGVsbG8sIFdvcmxkIQ=="

// Decoding
const decoded = atob("SGVsbG8sIFdvcmxkIQ==");
console.log(decoded); // "Hello, World!"

// For Unicode strings, use TextEncoder
const encoder = new TextEncoder();
const bytes = encoder.encode("Hello");
const base64 = btoa(String.fromCharCode(...bytes));

Python

import base64

# Encoding
encoded = base64.b64encode(b"Hello, World!")
print(encoded)  # b'SGVsbG8sIFdvcmxkIQ=='

# Decoding
decoded = base64.b64decode(encoded)
print(decoded)  # b'Hello, World!'

# URL-safe variant
url_safe = base64.urlsafe_b64encode(b"Hello, World!")

PHP

// Encoding
$encoded = base64_encode("Hello, World!");
echo $encoded; // "SGVsbG8sIFdvcmxkIQ=="

// Decoding
$decoded = base64_decode($encoded);
echo $decoded; // "Hello, World!"

Конечно, вам не нужно каждый раз писать код для кодирования или декодирования Base64. Наш онлайн-инструмент Base64 делает это мгновенно в вашем браузере без установки какого-либо программного обеспечения.

Конвертация изображений в Base64: преимущества и недостатки

Конвертация изображений в строки Base64 — одно из наиболее дискуссионных применений этого кодирования. Рассмотрим обе стороны:

Преимущества

  • Меньше HTTP-запросов: Каждое изображение, встроенное как data URI, устраняет один сетевой цикл. Для страниц с множеством маленьких иконок это может заметно улучшить время загрузки.
  • Самодостаточные документы: HTML-файл с изображениями в Base64 полностью автономен. Это полезно для шаблонов электронной почты, офлайн-документов и экспорта в один файл.
  • Нет проблем с CORS: Встроенные изображения полностью обходят ограничения cross-origin.
  • Упрощённое развёртывание: Не нужно управлять отдельными файлами изображений, путями CDN или конвейерами ресурсов для небольшой графики.

Недостатки

  • Увеличение размера на 33%: Закодированная строка всегда больше исходного двоичного файла.
  • Нет кэширования браузером: Встроенные Base64-изображения не могут кэшироваться отдельно. При каждой загрузке страницы передаётся вся закодированная строка.
  • Блокировка рендеринга: Base64-изображения в CSS должны быть загружены и разобраны как часть таблицы стилей до того, как страница сможет отрендериться.
  • Сложность обслуживания: Обновление встроенного Base64-изображения требует повторной генерации и замены всей закодированной строки.

Общее правило: используйте data URI Base64 для изображений менее 2 КБ (маленькие иконки, простые SVG, пиксели отслеживания 1x1). Для всего остального подавайте изображение как отдельный файл и позвольте браузеру его кэшировать. Поэкспериментируйте с нашими инструментами конвертации изображение в Base64 и Base64 в изображение.

Варианты Base64, которые стоит знать

Не всё кодирование Base64 одинаково. Вот основные варианты:

  • Стандартный Base64 (RFC 4648): Использует A-Za-z0-9+/ с дополнением =. Это наиболее распространённый вариант.
  • Base64URL (RFC 4648, раздел 5): Использует A-Za-z0-9-_ вместо +/. Необходим для URL, имён файлов и токенов. Используется в JWT.
  • MIME Base64 (RFC 2045): Тот же алфавит, что и стандартный, но с переносами строк каждые 76 символов. Используется во вложениях электронной почты.
  • Base32: Использует алфавит из 32 символов. Менее эффективен по объёму, но нечувствителен к регистру — полезен в контекстах, где чувствительность к регистру создаёт проблемы (например, секретные ключи TOTP).

Итоги и ключевые выводы

Кодирование Base64 — фундаментальный инструмент в арсенале каждого разработчика. Вот основные моменты, которые стоит запомнить:

  • Base64 преобразует двоичные данные в текст с помощью 64-символьного алфавита, создавая выходные данные на 33% больше входных.
  • Алгоритм работает путём разделения двоичных данных на 6-битные группы и сопоставления каждой группы с печатным символом.
  • Типичные сценарии использования: data URI, вложения электронной почты, токены JWT, аутентификация API и встраивание двоичных данных в JSON/XML.
  • Base64 — это кодирование, а не шифрование. Никогда не используйте его как средство защиты.
  • Используйте Base64 для небольших файлов и передачи данных. Избегайте его для больших файлов, обеспечения безопасности и критичных по производительности путей.
  • URL-безопасный вариант (Base64URL) заменяет проблемные символы для использования в URL и токенах.
Совет: Добавьте в закладки наш кодировщик/декодировщик Base64 для быстрого кодирования и декодирования. Инструмент работает полностью в вашем браузере, поэтому ваши данные никогда не покидают ваше устройство.
Напоминание о безопасности: Если вам нужно защитить конфиденциальные данные, используйте инструменты шифрования, такие как наш инструмент шифрования AES, а не кодирование Base64. Для генерации надёжных паролей воспользуйтесь генератором паролей.
Попробуйте наш бесплатный кодировщик Base64

Кодируйте и декодируйте текст или файлы в Base64 мгновенно в вашем браузере. Никакие данные не отправляются на сервер.