Base64: кодировать и декодировать текст
«Привет, мир!» в Base64 — 0J/RgNC40LLQtdGCLCDQvNC40YAh: 28 символов из 21 байта. Вставьте текст или строку Base64 — инструмент сам определит, кодировать её или декодировать.
Инструмент
Как кодировать в Base64
Base64 (RFC 4648) переводит каждые 3 байта в 4 печатных символа из алфавита A–Z, a–z, 0–9, «+» и «/» — всего 64 знака, отсюда название. Байты склеиваются в 24-битную группу, она режется на четыре 6-битных числа от 0 до 63, и каждое число заменяется символом таблицы. Если байтов не хватает до тройки, добавляется паддинг «=»: один знак при остатке 2 байта, два — при остатке 1.
длина Base64 = ⌈байты ÷ 3⌉ × 4 (объём растёт на 33 %)
байты = длина × 3 ÷ 4 − число «=»
Пример вручную: слово «Hi» — байты 0x48 и 0x69, в двоичном виде 01001000 01101001. Дополняем нулями до 24 бит и делим на шестёрки: 010010 000110 100100 000000 → числа 18, 6, 36 и добавочный ноль. По таблице 18 = S, 6 = G, 36 = k, а последняя шестёрка целиком состоит из добавленных нулей, поэтому вместо неё ставится «=». Результат — SGk=. Обратно: 4 символа дают 3 байта, один «=» отсекает лишний, остаётся 2 байта — «Hi».
Кириллица занимает в UTF-8 по 2 байта на букву, поэтому «Привет» (6 букв, 12 байт) превращается в 16 символов 0J/RgNC40LLQtdGC без паддинга, а фраза «Привет, мир!» (21 байт = 7 полных троек, остаток 0) — в 28 символов без знака равенства.
Что такое Base64 и где применяется
Base64 — это способ представить любые двоичные данные текстом из 64 печатных символов ASCII, чтобы передавать их там, где допустим только текст: во вложениях e-mail, JSON, URL и data-URI.
Base64 — не шифрование и не сжатие: любой человек декодирует строку за секунду, а объём растёт на треть. Смысл в другом — передать произвольные байты через каналы, рассчитанные только на текст. Вложения в письмах (MIME), картинки прямо в CSS и HTML (data:image/png;base64,…), заголовок Authorization: Basic с парой логин:пароль, JSON Web Token, сертификаты PEM, ключи SSH, значения в Kubernetes Secrets, вложения в XML для СМЭВ и электронного документооборота. При отладке чаще всего требуется обратное — декодировать Base64, чтобы прочитать содержимое токена или тела запроса.
Стандартный и URL-safe алфавит
| Вариант | 62-й символ | 63-й символ | Паддинг | Где встречается |
|---|---|---|---|---|
| Стандартный (RFC 4648, §4) | + | / | = | MIME, PEM, Basic Auth, data:URL |
| URL-safe (RFC 4648, §5) | - | _ | обычно нет | JWT, ссылки, имена файлов, OAuth |
| MIME (RFC 2045) | + | / | =, перенос каждые 76 знаков | вложения в письмах |
Символы «+», «/» и «=» в адресе страницы имеют собственный смысл: «+» превращается в пробел, «/» разделяет путь, «=» отделяет значение параметра. Поэтому в ссылках и JWT используют URL-safe вариант с «-» и «_» без паддинга. Декодер принимает оба алфавита, а также строки без «=» и с переносами строк — MIME режет Base64 на строки по 76 символов, и такие строки часто копируют целиком из письма или сертификата.
Ошибки декодирования
Строка не является Base64, если в ней есть символы вне алфавита (пробелы и переносы внутри допускаются — они удаляются), если «=» стоит не в конце или если длина без паддинга даёт остаток 1 при делении на 4 — такое бывает при обрезанном копировании. Отдельный случай: Base64 корректен, но декодированные байты не образуют текст UTF-8 — вероятно, это картинка, PDF или строка в Windows-1251. Инструмент сообщает об этом вместо того, чтобы показывать «кракозябры».
Вопросы и ответы
Base64 — это шифрование?
Нет. Base64 — обратимое кодирование без ключа: любой декодирует строку мгновенно. Оно защищает данные от искажения в текстовых каналах, но не от чтения. Пароль в заголовке Basic Auth или данные в JWT видны всем, кто перехватил трафик без HTTPS.
Почему Base64 длиннее исходного текста?
Каждые 3 байта кодируются 4 символами, поэтому объём растёт на 33 %, плюс до двух знаков «=». Латиница из 10 000 символов даёт 13 336 знаков, а кириллица в UTF-8 весит 2 байта на букву, так что русский текст вырастает почти в 2,7 раза по числу символов.
Что значит ошибка «невалидный Base64»?
В строке есть символы вне алфавита, «=» стоит не в конце или длина неверная: остаток 1 при делении на 4 невозможен. Обычно строка скопирована не полностью, к ней прилип лишний символ (точка, кавычка) или это вовсе не Base64, а hex или URL-encoded текст.
Чем URL-safe Base64 отличается от обычного?
Символы «+» и «/» заменены на «-» и «_», а паддинг «=» обычно опущен, чтобы строку можно было вставить в адрес страницы, имя файла или cookie без экранирования. Так кодируются части JWT и параметры OAuth. Декодер понимает оба варианта автоматически.
Как декодировать Base64 в картинку или файл?
Этот инструмент показывает результат как текст UTF-8. Файл нужно сохранить в бинарном виде: в Linux — командой base64 -d input.txt > file.png (в macOS ключ -D или --decode), в PowerShell — через [Convert]::FromBase64String и WriteAllBytes. Строку data:image/png;base64,… браузер откроет прямо из адресной строки.
Источники и методика
Обновлено: