developer • 5 мин чтения • Обновлено: 2026-09-20

Как работает кодирование Base64: побитовый разбор стандарта

Кодирование Base64 используется повсюду: от передачи токенов авторизации и вложений в email до встраивания иконок в CSS. Разбираем алгоритмическую математику преобразования 8-битных байтов в 6-битные группы, правила паддинга и физические причины оверхеда ровно в 33.3%.

Математика преобразования: 3 байта в 4 символа

Компьютерные данные состоят из 8-битных байтов (значения от 0 до 255). Исторические сетевые протоколы (например, ранний SMTP) разрабатывались для 7-битного ASCII и искажали байты с установленным старшим битом.

Base64 решает эту проблему, используя безопасный алфавит из 64 печатных символов: A–Z (26), a–z (26), 0–9 (10), + и /.
Для адресации 64 вариантов требуется ровно 6 бит (2^6 = 64):

1. Алгоритм берёт блок из 3 байтов по 8 бит (всего 24 бита);
2. Нарезает эти 24 бита на 4 порции по 6 бит;
3. Каждое 6-битное число (от 0 до 63) транслируется в соответствующий символ алфавита Base64.

Пример преобразования слова «Man»:
• 'M' (0x4D) = 01001101
• 'a' (0x61) = 01100001
• 'n' (0x6E) = 01101110
Общий поток 24 бит: 010011 010110 000101 101110
Десятичные индексы: 19, 22, 5, 46
Символы по таблице: T, W, F, u -> TWFu.

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

Полезный инструмент: В веб-разработке Base64 часто комбинируется с URL-параметрами: используйте URL Encode / Decode онлайн.

Полезный инструмент: Формат Base64Url критически важен для JWT (см. архитектуру безопасности JWT).

Зачем нужен паддинг символом «=»

Что происходит, если длина входных данных не кратна 3 байтам?

• Остался 1 байт (8 бит): к нему дописываются 4 нулевых бита до 12 бит (две 6-битные группы). Получаются 2 символа Base64, а оставшиеся 2 пустых слота дополняются символами выравнивания == (например, «M» -> TQ==);
• Осталось 2 байта (16 бит): дописываются 2 нулевых бита до 18 бит (три 6-битные группы). Получаются 3 символа Base64, а последний слот заполняется одним символом = (например, «Ma» -> TWE=);
• Осталось 3 байта (24 бита): выравнивание не требуется, паддинг отсутствует.

Декодер, видя символ =, мгновенно понимает, сколько фиктивных нулевых бит нужно отбросить в конце потока.

Миф об эффективности: почему оверхед 33% вреден для больших картинок

Поскольку каждые 3 байта превращаются в 4 символа, размер данных в кодировке Base64 гарантированно возрастает на 4/3 = 1.333... (ровно на +33.3%).

В веб-разработке популярна практика вставки мелких SVG-иконок прямо в CSS через Data URL:
background-image: url('data:image/svg+xml;base64,...')

Для иконок весом до 1–2 КБ это оправдано (устраняется лишний сетевой RTT-запрос к серверу). Однако встраивать в CSS или HTML фотографии весом от 50 КБ категорически запрещено:
• Файл увеличивается с 50 КБ до 67 КБ;
• Стили CSS блокируют первичный рендеринг страницы (Render-blocking resource);
• Браузер вынужден тратить ресурсы процессора на декодирование строки Base64 в растровый битмап при каждом парсинге DOM.

Часто задаваемые вопросы (FAQ)

В URL-адресах и веб-токенах JWT стандартные символы `+` и `/` заменяются на `-` и `_`, а завершающие знаки `=` отбрасываются, чтобы строку можно было безопасно передавать в параметрах GET-запроса без URL-encoding.

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

Воспользуйтесь нашим браузерным инструментом «Base64 кодер / декодер» — он работает локально и корректно поддерживает кириллицу в UTF-8.

Скопировано в буфер обмена!