Кодировать в Base64
Текст, изображение или любой файл — в Base64, и правильно. Буквы с диакритикой и эмодзи сохраняются, с чем обычные однострочные реализации не справляются. Ничего не сохраняется.
- Не сохраняется
- Без очереди и ожидания
- Без регистрации и водяных знаков
Текст кодируется в UTF-8, поэтому диакритика и эмодзи сохраняются.
Здесь появится результат: Base64.
Как это работает
Вставьте текст или перетащите файл
Текст кодируется как UTF-8. Файл кодируется байт в байт и не сохраняется.
Выберите вариант
Стандартный Base64, безопасный для URL Base64URL для токенов и строк запроса или готовый data URI для вставки в CSS или тег <img>.
Скопируйте результат
Скопируйте результат или, если он большой, скачайте его текстовым файлом.
Почему объём растёт ровно на треть
Base64 берёт по три байта и записывает их четырьмя символами, каждый из которых несёт шесть бит из двадцати четырёх. Четыре делить на три — отсюда и знаменитые 33 процента: это арифметика, а не неэффективность, и ни один кодировщик не сделает лучше, оставаясь в диапазоне печатных символов. Если данные не делятся на тройки ровно, последняя группа дополняется и помечается одним или двумя знаками =, поэтому длина любой строки Base64 всегда кратна четырём.
Существует два алфавита, и неверный выбор — самая частая проблема, с которой сюда приходят. Стандартный алфавит заканчивается на + и /, и оба символа что-то значат в URL: плюс в строке запроса превращается в пробел, а косая черта выглядит как разделитель пути. Вариант, безопасный для URL, использует вместо них - и _ — его применяют JSON Web Token, имена файлов и всё, что оказывается в адресе. В остальном они идентичны, и значение, закодированное одним алфавитом и декодированное другим, ломается так, что это похоже на повреждение данных.
Перенос строк — ещё одна деталь, зависящая от контекста. Вложения в письмах ожидают строки по 76 символов, сертификаты и ключи PEM — по 64, а data URI или поле JSON — вообще без переносов. Здесь перенос по умолчанию выключен, потому что сейчас чаще нужен вариант без него; включите его, если результат пойдёт в заголовок письма или в блок -----BEGIN-----, который отвергнет одну огромную строку.
Base64 — не шифрование, и он не даёт никакой защиты. Это просто смена алфавита: любой может мгновенно выполнить обратное преобразование, а любой сканер безопасности делает это автоматически. Его задача — передавать двоичные данные по каналам, которые принимают только текст: в теле письма, в полях JSON, в XML-документах, в data URI внутри таблицы стилей. Если спрятать так пароль в конфигурации, он не будет скрыт ни от кого, кто туда заглянет.
Если нужно другое
В командной строке base64 -w 0 file.bin кодирует без переноса в Linux, а просто base64 делает то же самое в macOS; openssl base64 -A работает одинаково везде. Для алфавита, безопасного для URL, basenc --base64url — тот инструмент, который делает это правильно без шага с заменой символов.
Для больших файлов весь этот подход не годится: файл целиком держится в памяти, а кодирование раздувает его на треть ещё до всего остального. Инструменты командной строки работают потоково, а в коде в любом языке есть инкрементный кодировщик. Стоит также спросить себя, нужен ли Base64 вообще: отправка двоичных данных как multipart/form-data или как «сырого» тела запроса избавляет и от расхода памяти, и от лишних 33 процентов.
Частые вопросы
Мой текст или файл где-нибудь сохраняется?
Нет. Ничего не сохраняется, ничего не записывается в журналы, и ни один сервер его не видит — и всё продолжает работать при отключённой сети. Для этих инструментов это не приятная мелочь. В онлайн-кодировщики и декодировщики постоянно вставляют действующие данные: токены сессий, API-ключи, заголовки Authorization, данные клиентов. Вставить такое на страницу, которая куда-то это отправляет, — значит раскрыть это, что бы сайт ни обещал насчёт удаления.
Почему здесь работают буквы с диакритикой и эмодзи?
Потому что текст перед кодированием переводится в байты UTF-8 — это правильный порядок, и именно этот шаг пропускает большинство наскоро сделанных реализаций. Встроенная в браузер функция `btoa` вообще не умеет работать с текстом: она принимает один байт на символ, поэтому `btoa("café")` просто выдаёт ошибку. Распространённый обходной путь `btoa(unescape(encodeURIComponent(s)))` работает случайно и ломается на эмодзи и других символах за пределами базового диапазона. Эта страница честно кодирует UTF-8 один раз, поэтому 日本語 и 🎉 проходят и декодируются обратно в точности.
Что такое Base64URL и когда он нужен?
Это Base64 с двумя заменёнными символами: + становится -, / становится _, а завершающие знаки = отбрасываются. Он существует потому, что +, / и = что-то значат в URL, и обычный Base64 искажается, когда попадает в строку запроса или путь. JWT, токены OAuth и всё, что передаётся в URL, используют Base64URL. Если результат пойдёт в ссылку, выбирайте его.
Base64 что-нибудь шифрует или защищает?
Нет, и об этом стоит сказать прямо. Base64 — это кодировка, а не шифрование: ни ключа, ни секрета нет. Любой, кто видит строку, декодирует её за один шаг — в том числе на этом сайте. Он нужен, чтобы безопасно передавать двоичные данные по каналам, принимающим только текст, например во вложениях писем и data URI. Если что-то нужно держать в секрете, нужно шифрование; Base64 не даёт никакой защиты.
Почему Base64 больше моего файла?
Примерно на 33%, всегда. Base64 записывает каждые 3 байта четырьмя текстовыми символами, поэтому размер по определению растёт на треть, плюс немного на дополнение. Это цена превращения двоичных данных в текст — и поэтому встраивать большое изображение в CSS как data URI обычно невыгодно.
Можно закодировать изображение в data URI?
Да — перетащите изображение и выберите «Data URI». Вы получите полную строку `data:image/png;base64,…` с уже подставленным правильным типом данных — её можно сразу вставить в таблицу стилей, тег <img> или шаблон письма.
Есть ли ограничение по размеру?
Ограничивает доступная память, а не фиксированный лимит, и она немаленькая — файлы во много мегабайт кодируются без проблем. Кодирование специально выполняется частями, чтобы справляться с большими файлами; очевидная реализация падает примерно на 125 KB с ошибкой «Maximum call stack size exceeded», и эта ошибка есть в очень многих онлайн-кодировщиках.
Полезно знать: Base64 увеличивает данные примерно на 33% — так устроен формат, это не ошибка. Файлы читаются в память целиком, поэтому очень большой файл может исчерпать память вкладки на телефоне до окончания работы. Перенос строк по умолчанию выключен; для электронной почты и формата PEM его нужно включить.
Разместите этот инструмент на своём сайте
Бесплатно для любого блога, страницы класса или справочной статьи. Вставьте один фрагмент кода — и посетители смогут пользоваться инструментом прямо на вашей странице.
Ещё Инструменты для разработчиков
Декодировать Base64
Base64 обратно в текст или файл
Кодировать URL
Текст, безопасный для вставки в URL
Генератор хешей
MD5, SHA-1, SHA-256, SHA-384 и SHA-512
Декодировать JWT
Что внутри токена — без передачи на сервер
Генератор UUID
v4 для секретов, v7 для ключей базы данных
Форматировать JSON
Нечитаемый JSON станет читаемым