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

8 сентября 2026 6 минут чтения Base64

Строка, которая выглядит как шифр, но им не является

Ситуация повторяется из раза в раз. В манифесте попадается поле password: cGFzc3dvcmQxMjM=. В заголовках письма вместо темы стоит =?UTF-8?B?0J/RgNC40LLQtdGCIQ==?=. В логе аутентификации мелькает Authorization: Basic YWRtaW46aHVudGVyMg==. Выглядит как что-то зашифрованное, а на самом деле это Base64 — способ записать произвольные байты 64 печатными символами: 26 строчных латинских букв, 26 заглавных, 10 цифр, плюс и слэш. Плюс знак равенства, который в сам алфавит не входит и служит только выравниванием.

Придумано это ради совместимости. Множество протоколов, которым уже не первый десяток лет, честно передают только семибитный ASCII: почта, часть HTTP-заголовков, старые форматы конфигов. Байт со значением 0x00 или 0xFF такой канал либо испортит, либо оборвёт на нём сообщение. Base64 решает проблему грубо, но надёжно: берёт по три байта, режет 24 бита на четыре группы по шесть, и каждую шестёрку (значение от 0 до 63) заменяет символом из алфавита. На выходе получается текст, который проходит куда угодно.

Отсюда два практических следствия, которые стоит запомнить раньше всего остального.

Первое: это не шифрование. Ключа нет, алгоритм открыт, обратное преобразование делает любой браузер одной строчкой. Значения в Kubernetes secret закодированы именно так, и это ровно та причина, по которой к ним нужны отдельные права доступа: сама кодировка не защищает ничего. Если вы прячете пароль в Base64 и считаете задачу решённой — задача не решена.

Второе: объём растёт примерно на треть. Три байта превращаются в четыре символа, то есть +33 % плюс один-два знака выравнивания. Килобайтная картинка станет строкой примерно на 1,37 КБ. Это важно, когда значение уходит в HTTP-заголовок или в переменную окружения, где длина не бесконечна.

Как понять, что перед вами именно Base64

Признаков немного, но они надёжные.

  • Длина кратна четырём. Каноническая строка всегда делится на 4 без остатка — иначе её добили бы знаками равенства.
  • Хвост из = или ==. Один знак означает, что в последней тройке был лишний байт сверх кратности, два — что осталось два байта. Если хвоста нет, строка просто оказалась кратной трём по длине исходника.
  • Только A–Z, a–z, 0–9, +, /. Ни пробелов внутри слова, ни дефисов, ни точек. Точки внутри — верный признак, что это JWT, а не одна строка Base64.
  • Отсутствие структуры. Хеш (SHA-256, MD5) — это шестнадцатеричные символы 0–9a–f фиксированной длины 64 или 32. Base64 длину имеет произвольную и содержит заглавные буквы.

Если строка начинается с eyJ — почти наверняка внутри JSON: eyJ это закодированное {". Такое начало типично для токенов и для конфигов, которые кто-то целиком упаковал в одну переменную.

Читаем содержимое

Разбор занимает три действия на странице декодирования Base64 в текст. Интерфейс страницы русский, поля подписаны буквально так:

  1. Вставьте строку в левое поле с подписью «Base64 на входе:». Подсказка в пустом поле показывает SGVsbG8gV29ybGQ= — это рабочий пример, из него получается Hello World. Лишние пробелы и переносы строк вычищать не обязательно.
  2. Нажмите жёлтую кнопку «Декодировать». Результат появляется справа, в поле с подписью «Результат:». Оно доступно только для чтения — редактировать вывод там не получится, это сделано намеренно.
  3. Оранжевая кнопка «Копировать» переносит расшифрованное в буфер обмена и на две секунды меняет свою надпись на «Скопировано!» — по ней и видно, что копирование прошло.
  4. Серая «Очистить» обнуляет сразу оба поля, входное и выходное.

Всё преобразование выполняет скрипт на самой странице, обращений к серверу за расшифровкой нет. Практический вывод: значение из тестового стенда можно вставить, не опасаясь, что оно уйдёт по сети. Но оно останется на экране до нажатия «Очистить», поэтому перед демонстрацией экрана поля лучше вычищать.

Обратная задача — превратить свой текст в Base64 для заголовка Basic Auth или для поля data в манифесте — решается на странице кодирования с кнопкой «Кодировать». Обе страницы и остальные соседние конвертеры собраны в разделе Base64.

Ошибки, на которых спотыкаются чаще всего

Скопировали лишнее. Самая частая причина ошибки декодирования — кавычки, приехавшие вместе со значением из JSON, или обрезающее многоточие из консоли, которая сократила длинную строку при выводе. Ещё вариант: почтовый клиент вставил мягкий перенос посреди строки. Уберите всё, что не входит в алфавит, и повторите.

Приняли base64url за Base64. В URL и в JWT плюс и слэш опасны: первый в query-строке означает пробел, второй режет путь. Поэтому применяется вариант base64url — + заменён на -, / на _, а выравнивание чаще всего просто отброшено. Такая строка на обычном декодере либо упадёт с ошибкой, либо выдаст мусор в тех местах, где встретились подменённые символы. Лечится вручную: замените дефисы на плюсы, подчёркивания на слэши, добейте длину знаками = до кратной четырём. Если же перед вами токен целиком, с двумя точками, — не мучайтесь с частями, отдайте его декодеру JWT, который сам разложит строку на «Заголовок» и «Данные».

Ждали текст, а внутри лежал файл. Строка вида data:image/png;base64,iVBORw0KGgo... — это картинка. Если скормить её текстовому декодеру, в поле «Результат:» окажется каша из служебных символов, и это не поломка, а честный ответ: PNG действительно так и выглядит, если читать его как текст. Двоичное содержимое надо восстанавливать в файл — для этого есть страница Base64 в файл. И префикс data:image/png;base64, перед вставкой надо отрезать: это не часть данных, а служебная обёртка для CSS и HTML.

Кириллица развалилась. Здесь важно, что Base64 хранит байты и понятия не имеет о кодировке. Декодер восстанавливает байты и трактует их как UTF-8. Если исходник был в UTF-8 — русский текст читается символ в символ. Если строку когда-то закодировали из windows-1251, байты вернутся правильные, а прочитаны будут неверно, и вы увидите знакомые кракозябры. Перекодировать такое приходится отдельным шагом, уже после расшифровки; сама страница смены кодировки не предлагает.

Ожидали загрузки файла. Страница работает только с текстом, вставленным в поле. Кнопки выбора файла на ней нет, .txt с длинной строкой перетащить некуда — содержимое придётся открыть и скопировать вручную. Для обратной операции с файлом, когда нужно получить Base64 из готового документа или картинки, существует отдельный инструмент в том же разделе.

Когда декодирование не поможет

Стоит честно ограничить ожидания. Если строка выглядит как случайный набор символов, но при декодировании выдаёт бессмыслицу, — вариантов два. Либо это вообще не Base64: хеш, идентификатор сессии, подпись. Либо данные перед кодированием сжали или зашифровали, и Base64 здесь — только внешняя упаковка. Второй случай виден по результату: получаются байты без всякой текстовой структуры, часто начинающиеся с сигнатуры архива. Прочитать такое без ключа или без распаковки не выйдет, и никакой декодер эту задачу не решит.

🛠️ Декодировать Base64 в текст онлайн бесплатно Расшифровывает Base64 строку в обычный текст: значения из Kubernetes secrets, заголовки писем, полезная нагрузка JWT. Кириллица в UTF-8 читается верно.
Запустить →
Как отличить Base64 от хеша?

По алфавиту и по длине. Хеш MD5 — это ровно 32 шестнадцатеричных символа, SHA-256 — 64, и только цифры с буквами `a–f` в нижнем регистре. В Base64 есть заглавные буквы, плюс, слэш, а длина зависит от исходника и кратна четырём. Главное отличие по сути: хеш необратим, из него исходные данные не достать, а Base64 разворачивается обратно всегда.

Что делать со строкой, которая начинается с `data:image/png;base64,`?

Отрезать всё до запятой включительно — это заголовок data URI, описывающий тип содержимого, а не сами данные. Остаток и есть Base64, но внутри картинка, а не текст. В текстовом декодере вы получите нечитаемые символы; правильный путь — страница восстановления файла, которая соберёт из строки скачиваемый PNG.

Почему `base64 -d` в терминале ругается на невалидный ввод?

Утилита строже браузера. Она спотыкается на переносах строк, на пробелах и на символах base64url, которые в стандартном алфавите не значатся. Помогает флаг `-i` (игнорировать мусор) в GNU coreutils, но надёжнее почистить строку. Если под рукой нет терминала или строка приехала из чата с невидимыми символами, проще вставить её в поле на странице декодирования и посмотреть результат глазами.

Безопасно ли вставлять рабочий секрет в онлайн-декодер?

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