Base64 кодировщик

Работает офлайнНичего не загружаетсяБесплатно, без регистрации

PEM-блоки, вложения писем и openssl без -A ждут переносов

Всё кодируется локально. Файлы читаются через FileReader и никуда не загружаются.

Кодируйте и декодируйте Base64 с корректной обработкой UTF-8 для любого языка. Также превращает любой файл в data URI, готовый для вставки в HTML или CSS.

Как устроен Base64

Base64 берёт три байта — 24 бита — и перераспределяет их в четыре группы по шесть бит. Каждая 6-битная группа — индекс в алфавите из 64 символов: A–Z, a–z, 0–9, плюс и слеш. Если длина входа не кратна трём, результат дополняется одним или двумя знаками равенства — поэтому так много Base64 заканчивается на = или ==.

URL-безопасный вариант меняет плюс и слеш на дефис и подчёркивание, потому что у этих двух символов есть собственное значение внутри URL и иначе поверх Base64 понадобилось бы ещё и процентное кодирование.

Шаг UTF-8, который пропускают

Браузерная btoa() принимает только символы из диапазона 0–255, поэтому btoa("Ünsiyyət") выбрасывает исключение: ə — это U+0259, заметно выше потолка. Решение — сначала перевести текст в байты UTF-8, а уже их закодировать в Base64. Этот инструмент так и делает, поэтому нелатинский текст здесь корректно проходит туда и обратно, а в упрощённых реализациях ломается.

Из-за того же шага показатель роста выше считается в байтах. Три байта всегда дают четыре символа, но символ — не байт: в UTF-8 кириллическая буква занимает два байта, иероглиф — три. Подсчёт символов сделал бы то же самое кодирование в несколько раз дороже, чем оно есть.

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

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

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

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

Base64 представляет каждые три байта четырьмя ASCII-символами, поэтому результат примерно на 33 процента больше входа в байтах, плюс дополнение. Обратите внимание: считается в байтах, а не в символах. Японский иероглиф — это три байта UTF-8, поэтому семь японских символов дают 28 символов Base64: рост символов вчетверо, а байтов — на привычную треть.

Корректно ли обрабатывается неанглийский текст?

Да. Текст сначала кодируется в UTF-8, затем в Base64. Это важно, потому что встроенная функция браузера btoa выбрасывает ошибку на любом символе выше кодовой точки 255 — а это все латинские буквы с диакритикой, вся кириллица, арабица, китайские иероглифы и эмодзи.

Когда лучше data URI, а когда файл?

Для мелких ресурсов, которые иначе стоили бы лишнего сетевого запроса: иконка в пару килобайт или подмножество шрифта. Примерно от 5 КБ проигрыш в размере перевешивает сэкономленный запрос, а поскольку data URI встраивается в файл, который на него ссылается, отдельно закешировать его нельзя.

Похожие инструменты