Base64 онлайн: декодирование и кодирование

Вставьте Base64, чтобы получить исходные данные, или превратите в Base64 текст, картинку либо любой файл. Можно вставить целиком data URI вида data:image/png;base64,... — префикс будет распознан и убран за вас. Раскодированные изображения показываются тут же, для двоичных данных появляется кнопка скачивания. Всё выполняется локально в браузере, никакие данные никуда не отправляются.
Base64
Примечания:
1. В поле декодирования можно вставить целиком data: URI — префикс снимается автоматически, а переводы строк и пробелы игнорируются.
2. Безопасный для URL алфавит (-_) и отсутствующие символы = в конце обрабатываются сами — руками ничего править не нужно.
3. Если на выходе не текст, формат будет определён за вас: изображения показываются сразу, для всего остального появляется кнопка скачивания.
4. При кодировании размер ограничен 10 МБ: Base64 раздувает объём примерно на треть, и встраивать что-то крупнее просто нет смысла.
5. Base64 — это кодирование, а не шифрование. Обратить его может кто угодно, поэтому защищать им пароли и личные данные нельзя.

О кодировании и декодировании Base64

Base64 — это шифрование?

Нет, и это самое важное на всей странице. Base64 —кодирование: произвольные двоичные данные переписываются 64 печатными символами (A-Z a-z 0-9 + /). Ни ключа, ни секрета здесь нет: правила общедоступны, и любой обратит преобразование в один шаг. Base64 решает задачу «канал передаёт только текст, а мне нужно протолкнуть через него картинку», а вовсе не задачу «сделать так, чтобы никто не прочитал». Поэтому пароль, номер документа или ключ от API, пропущенные через Base64 перед записью в базу или в код фронтенда, не защищены ничем. Если вам действительно нужна необратимость, посмотрите SHA-256 онлайн, а для хранения паролей берите медленный хеш вроде bcrypt.

Ссылка вида data:text/html;base64 не открывается — как достать из неё содержимое?

Такие ссылки выглядят как data:text/html;charset=utf-8;base64,PGh0bWw+...и обычно приходят из функции «поделиться» в некоторых почтовых сервисах и на форумах. Не открываются они не потому, что ссылка испорчена: с 2017 года Chromeзапрещает переход по data: ссылке в адресной строке, а следом за ним это сделали Firefox и Edge: возможностью слишком активно пользовались фишеры — поддельная страница входа целиком помещается в одну ссылку, а настоящего домена адресная строка для неё показать не может.

Само содержимое из ссылки никуда не делось. Вставьтессылку целиком(вместе с префиксом data:text/html;charset=utf-8;base64, ) в поле декодирования выше — страница распознает префикс, уберёт его и раскодирует остальное. Если внутри HTML, вы увидите полный исходный код страницы.Одно предупреждение, прежде чем смотреть: если ссылку прислал незнакомец, шанс, что это фишинговая страница, вполне заметный. Раскодировать её и прочитать содержимое можно, а вот вводить логин и пароль в найденную там форму — ни в коем случае.

Зачем на самом деле переводят картинки в Base64

Главным образом радивстраивания: маленький значок пишется прямо в CSS как background-image: url(data:image/png;base64,...) или в HTML как <img src>, и это экономит один HTTP-запрос. Тем же способом картинку помещают в JSON, Markdown или тело письма — туда, куда ничего кроме текста не положишь. Плата — примерно треть лишнего объёма (каждые 3 байта превращаются в 4 символа) и невозможность кэшировать встроенную картинку отдельно: поменяли один байт — сбросился кэш всего CSS-файла. Поэтому приёмгодится только для значков в несколько КБ, а фотографиям и крупным изображениям место за обычным URL. Отметьте выше «Добавить префикс data URI», и вы получите готовую строку, которую можно вставить прямо в код.

Почему в одном Base64 встречаются - и _, а другой заканчивается без =

Это безопасный для URL вариант(RFC 4648 §5). В стандартном алфавите символы + и / имеют особый смысл в адресах и именах файлов и внутри параметра запроса экранируются или обрезаются, поэтому их заменяют на - и _; а завершающие = в адресе мешают ничуть не меньше и обычно просто отбрасываются. Ровно так закодированы три части JWT. При декодировании страница узнаёт обе записи сама, и подменять символы руками не придётся; а чтобы получить такую форму при кодировании, отметьте «Алфавит, безопасный для URL».

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

Можно ли расшифровать Base64?

В Base64 нет шифрования, а значит, и расшифровывать нечего — правильное слово здесьДекодировать, и оно срабатывает всегда: переключитесь выше в режим декодирования, вставьте строку, нажмите — и вот исходные данные. С односторонними хеш-функциями вроде MD5 и SHA-256 у него нет ничего общего: те необратимы, а Base64 — полностью обратимое двустороннее кодирование. Если кто-то «шифрует» с его помощью чувствительные данные, это не схема шифрования, а дыра в безопасности.

На выходе получилась каша из символов — что делать?

Сначала прочитайте подсказку. После декодирования страница пытается прочитать байты как UTF-8, и если не выходит — значит, содержимоетекстом никогда и не было: это картинка, PDF или архив. В таком случае страница называет распознанный формат и предлагает кнопку скачивания — скачать и есть правильное действие, а выводить такое на экран, конечно, получится кашей. Если же вы уверены, что там текст, а он всё равно нечитаем, скорее всего, исходник закодирован не в UTF-8, а, скажем, в CP1251. Эта страница всегда декодирует как UTF-8, поэтому здесь понадобится инструмент с выбором кодировки.

Почему появляется сообщение «недопустимый Base64»?

Три обычные причины. Первая: при копировании потерялось несколько символов в конце, длина перестала делиться на четыре, и дополнить её нечем. Вторая: внутрь затесались символы вне алфавита Base64 — копирование из переписки часто приносит с собой типографские кавычки или многоточие. Третья: строка на самом деле не Base64, а процентное кодирование (%3Chtml%3E ). Переводы строк и пробелы к этой ошибке привести не могут — страница их просто игнорирует.

Почему закодированный текст стал длиннее?

Base64 представляет 3 байта четырьмя символами, поэтому объём неизменно вырастает до 4/3исходного — это примерно на 33% больше, — плюс символы дополнения в конце. Так устроено само кодирование, и в любом другом инструменте будет ровно то же самое. Если объём важен, сжимайте перед кодированием либо не встраивайте вовсе, а ссылайтесь по URL.

Файл какого размера он потянет?

При кодировании — до 10 МБ. Это не технический потолок, а граница, за которой затея теряет смысл: Base64 существует ради встраивания данных в текст, а файл на 10 МБ превращается в строку на 13 МБ, которая создаст проблемы везде, куда её ни вставь. У декодирования жёсткого предела нет, но на очень длинных строках браузер замедляется, и ввод в несколько десятков мегабайт может подтормозить.

Base64 и URL-кодирование — это одно и то же?

Нет. URL-кодирование (процентное) заменяет лишь те символы, которые имеют особый смысл в адресе, на %XX, а всё остальное оставляет как есть, поэтому результат в общих чертах читается. Base64 же переписываетВсесодержимого шестьюдесятью четырьмя символами: прочитать нельзя вовсе, зато любые двоичные данные переносятся безопасно. Встречаются они часто вместе: когда Base64 в стандартном алфавите кладут в параметр URL, символы + и / внутри него приходится дополнительно кодировать процентами — именно поэтому и появился безопасный для URL вариант.

Можно ли кодировать в Base64 кириллицу напрямую?

Можно, но следите за кодировкой. Base64 работаетс байтами, а не с символами, поэтому текст сначала нужно превратить в байты какой-нибудь кодировкой. Страница всегда берёт UTF-8 — сегодня это норма. Тот же самый текст, закодированный в CP1251, а затем в Base64, даст совершенно другой результат, так что при расхождении двух инструментов проверяйте сначала кодировку, а не реализацию Base64.

Загружается ли мой файл на сервер?

Нет. Для преобразования используются встроенные в браузер atob / btoa и FileReader: файл читается в память, преобразуется и сразу показывается, и ни один байт не покидает ваше устройство. Отключите сеть после загрузки страницы — инструмент продолжит работать; это самый прямой способ убедиться. Подробности здесь:Политика конфиденциальности.