Кодирование / декодирование Base64
КодированиеUTF-8-безопасное кодирование и декодирование Base64, с опцией URL-безопасного варианта.
На этой странице
Что такое 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é корректно проходит туда-обратно вместо ошибки.
Как пользоваться#
- Выберите направление переключателем Кодировать / Декодировать в левом верхнем углу панели инструментов.
- Введите или вставьте текст в панель Ввод слева.
- В режиме Кодировать ввод трактуется как UTF-8-текст.
- В режиме Декодировать ввод должен быть строкой base64. Пробелы допускаются.
- Отметьте URL-безопасно, если нужен алфавит base64url (
-и_вместо+и/, выравнивание убрано). Это то, чего ждут JWT и многие схемы подписанных URL. - Результат появляется в реальном времени в панели Вывод справа. Нажмите Копировать, чтобы забрать его.
- Используйте Пример, чтобы подставить демонстрационную пару, и Очистить, чтобы сбросить обе панели.
Ключевые возможности#
- Безопасный 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-кодируйте шифротекст для передачи.