Инструменты
Руководства

Кодирование / декодирование Base64

Кодирование

UTF-8-безопасное кодирование и декодирование Base64, с опцией URL-безопасного варианта.

100 % на клиенте Без бэкенда
Ввод
Вывод
На этой странице

Что такое Base64?#

Base64 — способ записать произвольные байты, используя лишь 64 печатных символа ASCII (A-Z, a-z, 0-9, +, /, с = для выравнивания). Он существует, потому что огромные пласты вычислительного мира проектировались под текст — тела писем, поля JSON, HTTP-заголовки, префиксы data-URI, — и они давятся «сырыми» байтами, особенно байтами со старшим битом или встроенными управляющими кодами. Base64 — это lingua franca, к которому прибегают, когда данным «двоичной» формы нужно пережить текстовый канал.

Каждые три входных байта (24 бита) становятся четырьмя символами base64 (каждый кодирует 6 бит). Поэтому вывод base64 всегда кратен четырём символам и примерно на 33 % больше исходных байт — избыточность это плата за печатность. Когда длина ввода не кратна трём, в конце появляются один или два символа выравнивания =.

Эта страница кодирует и декодирует base64 с безопасной поддержкой UTF-8. Ловушка, в которую постоянно попадают: прямая передача строки в btoa() выбрасывает InvalidCharacterError, как только в ней оказывается не-ASCII символ (é, 中文, эмодзи). Исправление — сначала закодировать текст в UTF-8-байты, затем base64, что этот инструмент и делает, поэтому café корректно проходит туда-обратно вместо ошибки.

Как пользоваться#

  1. Выберите направление переключателем Кодировать / Декодировать в левом верхнем углу панели инструментов.
  2. Введите или вставьте текст в панель Ввод слева.
    • В режиме Кодировать ввод трактуется как UTF-8-текст.
    • В режиме Декодировать ввод должен быть строкой base64. Пробелы допускаются.
  3. Отметьте URL-безопасно, если нужен алфавит base64url (- и _ вместо + и /, выравнивание убрано). Это то, чего ждут JWT и многие схемы подписанных URL.
  4. Результат появляется в реальном времени в панели Вывод справа. Нажмите Копировать, чтобы забрать его.
  5. Используйте Пример, чтобы подставить демонстрационную пару, и Очистить, чтобы сбросить обе панели.

Ключевые возможности#

  • Безопасный UTF-8 в обоих направлениях. Кодирование пропускает текст через TextEncoder первым, поэтому многобайтовые символы никогда не вызывают сбоя; декодирование пропускает байты через TextDecoder, поэтому исходный текст восстанавливается точно.
  • Стандартный и URL-безопасный алфавиты. Один флажок переключает между классическим base64 (+/=) и base64url (-_ без выравнивания) с корректным пере-выравниванием при декодировании.
  • Полностью на стороне клиента. Преобразование идёт только в вашем браузере — бэкенда и сетевого запроса нет. Вставка сюда чувствительного токена никуда его не отправляет.
  • Живая строка состояния. Полоса под панелями сообщает об ошибках кодирования/декодирования (например, о вводе вида % или усечённом вводе), а не молча выдаёт мусор.

Разбор примера#

В режиме Кодировать и стандартном (не URL-безопасном) режиме ASCII-текст Hello, World! становится:

SGVsbG8sIFdvcmxkIQ==

Два завершающих = показывают, что 13-байтовый ввод не был кратен трём — это ожидаемо, а не ошибка.

Поддержка UTF-8 вступает в силу, как только вы выходите за ASCII. Кодирование café (где é — два UTF-8-байта, c3 a9) даёт:

Y2Fmw6k=

Если бы вы вызвали btoa("café") прямо в консоли, оно выбросило бы ошибку. Этот инструмент — нет, потому что сначала кодирует UTF-8-байты.

URL-безопасный режим переписывает алфавит так, чтобы вывод никогда не нёс символов, которые URL мог бы истолковать неверно: + становится -, / становится _, а завершающее выравнивание = убирается (при декодировании добавляется автоматически). Возьмём стандартный вывод выше, SGVsbG8sIFdvcmxkIQ==, — в URL-безопасном режиме два выравнивающих = срезаются, получаем SGVsbG8sIFdvcmxkIQ. Замена +//-/_ меняет что-либо, только когда эти символы действительно присутствуют в выводе, что обычно для «двоичных» данных — хеш-сводок или случайных токенов, — как раз тех, что вы вставляете в путь URL или параметр запроса без дополнительного экранирования.

FAQ#

Декодированный текст отображается «кракозябрами». Что случилось?#

Почти всегда декодированный base64 был кодировкой байт в какой-то другой кодировке (часто Latin-1 или Windows-1252), а не UTF-8. Этот инструмент декодирует байты как UTF-8, поэтому Latin-1-закодированный é (0xe9, одиночный байт) не является корректным UTF-8 и отображается неверно. Выясните, как другая сторона закодировала исходный текст, или перекодируйте его в UTF-8 заранее.

Стандартный base64 или base64url — что мне нужно?#

Стандартный (+/=) — по умолчанию для всего, что не идёт в URL: вложения email, data: URI, поля JSON с двоичными данными. Включайте URL-безопасно, когда вывод будет лежать в пути URL, строке запроса или сегменте JWT, где +, / и = либо ломают разбор, либо калечатся транспортом. Декодирование любой из форм принимается автоматически.

Почему кодированный вывод длиннее моего ввода?#

Это неотъемлемое свойство, а не баг. Base64 упаковывает 6 бит на символ вместо 8, поэтому вывод примерно в 4/3 раза больше ввода — около 33 % накладных расходов. Для очень маленьких вводов относительно оригинала он может казаться ещё больше, потому что фиксированная структура доминирует.

Может ли инструмент расшифровать или взломать строку base64?#

Нет — base64 это кодирование, а не шифрование. Оно полностью обратимо по конструкции и не несёт ключа. Любой, у кого есть строка, может её декодировать. Если вам действительно нужна секретность, сначала зашифруйте (например, схемой authenticated encryption), а затем base64-кодируйте шифротекст для передачи.