Что такое Base64?
Base64 — это схема кодирования, которая представляет бинарные данные с помощью 64 печатаемых символов. Её берут всегда, когда чисто текстовый канал должен переносить байты: маленькие картинки, встроенные прямо в HTML, токены, вложения email, data-URL, а также поля JSON, где лежат бинарные блоки.
Base64 — это кодирование, а не шифрование. Декодировать строку Base64 можно мгновенно и получить исходное содержимое, поэтому полагаться на неё как на защиту нельзя. Всё, что лежит внутри Base64, фактически открыто — если только данные не были зашифрованы до кодирования.
Под капотом Base64 берёт 3 байта (24 бита) и переписывает их 4 символами из фиксированного алфавита из 64 знаков (A–Z, a–z, 0–9, +, /). Если длина входа не кратна 3, кодировщик добавляет один или два символа = в конце — это padding. Именно поэтому строки Base64 часто заканчиваются на =.
Кратко
Base64 превращает бинарные данные в безопасный для копирования текст. В таком виде данные встречаются внутри JWT, в data-URL и во вложениях писем. Это не шифрование.
Как это устроено: наглядный пример
Возьмём слово Man. Три байта (24 бита) разбиваются на четыре группы по 6 бит, и каждая группа заменяется символом алфавита:
| Символ | M | a | n |
| Байт (ASCII) | 77 | 97 | 110 |
| Биты | 01001101 | 01100001 | 01101110 |
| 6-битные группы | 010011 | 010110 | 000101 | 101110 |
| Число | 19 | 22 | 5 | 46 |
| Символ Base64 | T | W | F | u |
Получилось TWFu. Если не хватает байтов до тройки, остаток добавляется нулевыми битами, а в конец ставится padding: Ma → TWE=, M → TQ==.
Краткий справочник по Base64
То, с чем вы будете сталкиваться постоянно, как только начнёте работать с Base64, описано в RFC 4648.
| Элемент | Что это | Пример |
| Алфавит | 64 символа стандартного Base64 | A–Z, a–z, 0–9, +, / |
| URL-safe алфавит | Используется в JWT и URL | A–Z, a–z, 0–9, -, _ |
| Padding | Дополняет последнюю группу, если длина не кратна 3 | = или == |
| Размер группы | Байт на блок → символов на выходе | 3 байта → 4 символа |
| Рост длины | Результат примерно на 33% длиннее входа | 100 Б → 136 символов |
| Перенос строк | MIME (письма) — по 76 символов, PEM — по 64 | строки с \r\n |
| Data URL | Встраивание файла прямо в HTML/CSS | data:image/png;base64,... |
Base64 в лентах Atom
В Atom (RFC 4287) Base64 встречается в элементе atom:content: если у него указан type с медиатипом, который не относится к тексту, HTML, XHTML или XML (например, image/png), содержимое обязано быть закодировано в Base64. Если валидатор ругается на такое содержимое, закодируйте файл здесь и вставьте результат в ленту.