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) сознательно отбрасывают =, и тогда длину нужно восстанавливать перед декодированием.