Перейти к содержимому

Base64: кодировать и декодировать текст

«Привет, мир!» в Base64 — 0J/RgNC40LLQtdGCLCDQvNC40YAh: 28 символов из 21 байта. Вставьте текст или строку Base64 — инструмент сам определит, кодировать её или декодировать.

Инструмент

Действие
  • ДействиеКодирование (определено автоматически)
  • АлфавитСтандартный: «+», «/», паддинг «=»
  • Исходный текст12 символов, 21 байт UTF-8
  • Длина результата28 символов
  • Рост объёма× 1,33
Каждые 3 байта исходного текста превращаются в 4 символа Base64, остаток дополняется знаками «=».
Base64 онлайн — кодировать и декодировать текст, URL-safe
Текст UTF-8 → Base64 и обратно, автоопределение направления, URL-safe алфавит, проверка ошибок

Как кодировать в 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 − число «=»

Размер Base64

Пример вручную: слово «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,… браузер откроет прямо из адресной строки.

Источники и методика

Обновлено: