Все статьи

Base64: зачем нужно кодирование и как оно работает

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

Как работает кодирование

Входные байты группируются по три (24 бита) и разбиваются на четыре шестибитных блока. Каждому блоку соответствует один символ из алфавита Base64 (A–Z, a–z, 0–9, +, /). Если длина входных данных не кратна трём байтам, в конце добавляется символ-заполнитель =.

Зачем это нужно

Многие протоколы и форматы — email (MIME), URL-адреса, JSON, XML — рассчитаны на текст и не умеют корректно передавать «сырые» байты: нулевые байты, управляющие символы или последовательности, конфликтующие с синтаксисом формата. Base64 обходит это ограничение, превращая любые бинарные данные в безопасный текст.

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

  • Вложения файлов в email через MIME.
  • Передача изображений или небольших файлов в JSON API.
  • Хранение бинарных данных в текстовых полях базы данных или конфигурации.
  • Кодирование частей JWT-токена (header и payload).

Чем Base64 НЕ является

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

Стандартный и URL-safe алфавиты

Классический алфавит Base64 использует символы + и /, которые имеют особое значение в URL-адресах и именах файлов. Для таких случаев существует вариант Base64URL, где + заменён на -, а / — на _. Если вставить результат стандартного кодирования в URL без дополнительного percent-encoding, символы + и / могут исказить адрес или конфликтовать с разделителями пути.

Частая ошибка: обрезанный или «испорченный» заполнитель

Символ = в конце строки — это не мусор, а часть кодирования, которая показывает, сколько байтов не хватает в последнем блоке. Если скопировать Base64-строку не полностью или удалить заполнители вручную, декодер вернёт ошибку или оборванный результат. Некоторые системы (например, JWT) сознательно отбрасывают =, и тогда длину нужно восстанавливать перед декодированием.

Попробовать инструмент