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

Перевести текст в Base64 и расшифровать обратно: кириллица в UTF-8, Latin-1, URL-safe алфавит, разбивка по 76 символов, файл в Base64 и обратно. Всё считается в браузере.

Параметры

Угадывать направление по виду входа или задать его вручную

Как превращать буквы в байты перед кодированием

Чем записывать результат

Выравнивание «=»Добивать запись знаками «=» до длины, кратной четырём. Снимите флажок, если получатель их не принимает
Разбивать по 76 символовПереносы строк, как в письмах и MIME: длинная запись читается и копируется целиком

Исходные данные

Направление определится само: запись Base64 разберётся, обычный текст закодируется

или перетащите его сюда — содержимое превратится в Base64

Результат

Зачем нужен Base64

Base64 решает одну задачу: протащить произвольные байты через канал, который умеет передавать только текст. Так вложения попадают в письмо, картинка — в HTML и CSS как data-URI, ключ подписи — в поле JSON, а двоичное значение — в параметр адреса. Шесть бит на символ выбраны не случайно: 64 знака есть в любой кодировке и не конфликтуют с управляющими символами, поэтому запись переживает и почтовый транспорт со его ограничением на длину строки, и текстовый протокол. Плата за это — размер: каждые три байта превращаются в четыре символа, то есть данные растут примерно на треть, а с выравниванием «=» чуть больше.

Запись неоднозначна в трёх местах, и инструмент даёт их видеть. Кириллица сначала превращается в байты: в UTF-8 русская буква занимает два байта, в Latin-1 не помещается вовсе — и если разобрать такую запись не той кодировкой, получится не ошибка, а осмысленный мусор. Алфавит бывает стандартным и URL-safe: «+» и «/» в адресе значат другое, поэтому их заменяют на «-» и «_», и на входе инструмент понимает оба варианта сразу. Третье — мелочи оформления: выравнивание «=» и разбивка длинной записи по 76 символов. На разборе они необязательны, а на сборке их включают, только если того требует получатель.

Всё происходит в браузере: текст превращается в байты, байты — в символы алфавита и обратно прямо на странице. Ни текст, ни выбранный файл никуда не отправляются, а размер до и после виден сразу — вместе с разницей в процентах, форматом содержимого, узнанным по сигнатуре, и предпросмотром картинки, если в записи лежит изображение. Инструмент работает офлайн, а после закрытия страницы от данных не остаётся ничего.

Частые вопросы

Как перевести текст в Base64 и как расшифровать Base64 обратно?

Вставьте текст в поле «Исходные данные» — результат появится сразу, без кнопок. Направление по умолчанию определяется по виду входа: запись из символов Base64 разбирается, обычный текст кодируется. Если угадывать не нужно, выберите направление вручную в параметрах. Кнопка «Поменять местами» в панели результата переносит готовую запись во вход и меняет направление на обратное — так одна и та же строка проходит путь туда и обратно.

Почему кириллица даёт другой Base64, чем латиница, и что такое UTF-8?

Base64 кодирует байты, а не буквы. Русская буква в UTF-8 занимает два байта, латинская — один, поэтому «Привет» и «Privet» дают разной длины записи. Режим «ASCII / Latin-1» кладёт в каждый байт ровно один символ: он нужен, когда получатель читает байты напрямую или когда запись пришла из старой однобайтовой системы. В этом режиме кириллица не помещается, и инструмент скажет, какой именно символ вышел за предел, — подставить «?» и молча испортить данные хуже, чем показать место.

Что такое URL-safe Base64 и зачем он нужен?

Стандартный алфавит использует «+» и «/», а в адресе страницы и в имени файла эти символы значат другое: «+» превращается в пробел, «/» делит путь. URL-safe алфавит заменяет их на «-» и «_» — по стандарту RFC 4648 такая запись переживает и адрес, и имя файла. При разборе инструмент принимает оба алфавита одновременно: отдельно угадывать, каким кодировали, не нужно, и переключатель задаёт только то, чем записывать результат.

Что делать, если в Base64 нет знаков «=» или запись разбита на строки?

Ничего: разбор это переживёт. Переносы строк, пробелы и неразрывные пробелы выбрасываются, недостающие знаки «=» дописываются автоматически — так приходит Base64 в письмах и в значениях параметров, где «=» теряется. Выравнивание нужно только при кодировании, и его можно выключить, если получатель лишние знаки не принимает. Разбивка по 76 символов тоже необязательна: она нужна там, где длинную строку читает человек или режет транспорт, а браузер и любая библиотека разбирают запись и без переносов.

Как узнать, что за файл закодирован в Base64?

По сигнатуре — первым байтам содержимого, а не по имени: у Base64 имени нет. Инструмент узнаёт PNG, JPEG, GIF, PDF и ZIP, показывает название формата и тип MIME, а картинку сразу выводит на страницу. Дальше кнопка «Скачать» отдаёт файл с правильным расширением и типом. Если формат не распознан, содержимое всё равно можно скачать как application/octet-stream — это стандартная отговорка для двоичных данных, о которой получатель только и может узнать, что файл ему незнаком.

Данные отправляются на сервер?

Нет. Кодирование, разбор, определение формата и сборка файла выполняются на JavaScript в самой странице: текст и содержимое файла не уходят по сети, не сохраняются и не попадают в логи. Файл читается браузером локально, а ссылка на скачивание собирается из тех же данных прямо на странице. Инструментом можно пользоваться офлайн, и это важно, когда в записи лежит выгрузка с персональными данными или вложение из внутренней системы.

Base64 — это шифрование? Можно так хранить пароли?

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