Кодирование текста и файлов в Base64

Преобразуйте текст, байты или любой файл в Base64. Выберите кодировку, которую ожидает получатель, оставьте или уберите дополнение =, а для MIME и PEM включите перенос строк по 76 или 64 символа.

Работает полностью в браузере. Данные никуда не загружаются.

Как пользоваться

  1. Введите или вставьте текст для кодирования. Чтобы закодировать байты, выберите Hex в параметре «Формат ввода», а чтобы закодировать файл, нажмите «Открыть файл».
  2. Оставьте в параметре «Кодировка текста» значение UTF-8, если принимающая система не ожидает другую кодировку.
  3. Настройте параметры: в большинстве случаев подходит вариант «Стандартный (RFC 4648)»; отключите дополнение, если получателю оно не нужно, и при необходимости включите перенос строк по 76 (MIME) или 64 (PEM) символа.
  4. Скопируйте результат в Base64 или скачайте его в виде файла.

Как работает кодирование Base64

Кодировщик читает входные данные по три байта. Эти 24 бита делятся на четыре группы по 6 бит, и каждое 6-битное значение (от 0 до 63) выбирает один символ: A-Z для значений от 0 до 25, a-z для 26–51, 0-9 для 52–61, затем + и /. Три байта на входе дают четыре символа на выходе, поэтому Base64 примерно на 33% больше исходных данных.

Текст    M        a        n
Байты    77       97       110
Биты     01001101 01100001 01101110
6 бит    010011 010110 000101 101110
Индекс   19     22     5      46
Base64   T      W      F      u

Дополнение и длина результата

Если длина входных данных не кратна трём, последняя группа оказывается неполной. Один оставшийся байт превращается в два символа и ==, два оставшихся байта — в три символа и один =. Поэтому для n входных байтов результат с дополнением всегда имеет длину 4 × ceil(n / 3) символов.

Дополнение не несёт данных. В JSON Web Token, параметрах URL и многих API его опускают, поэтому отключайте дополнение, если принимающая сторона ожидает результат без него. Для ссылок и имён файлов выберите вариант, безопасный для URL, или воспользуйтесь страницей Base64URL: в обоих случаях + и / заменяются на - и _.

Перенос строк для MIME и PEM

По умолчанию результат выводится одной длинной строкой: именно это нужно для JSON, data URI и заголовков HTTP. Переносы строк требуются в двух форматах:

  • MIME, 76 символов. В почтовых вложениях, передаваемых с Content-Transfer-Encoding: base64, строки не должны быть длиннее 76 символов (RFC 2045). Этот вариант завершает строки символами CRLF, как того требует MIME.
  • PEM, 64 символа. Сертификаты и ключи между строками -----BEGIN и -----END разбиваются на строки по 64 символа (RFC 7468). Этот вариант использует окончания строк LF.

Кодировки текста и файлы

Base64 кодирует байты, а не буквы, поэтому текст сначала преобразуется в байты с помощью кодировки. Буква é занимает два байта в UTF-8, но один байт в ISO-8859-1 или Windows-1252; то же касается кириллицы в UTF-8 и Windows-1251. Поэтому один и тот же текст даёт разный Base64. UTF-8 подходит для веба, JSON и почти всех современных API; GBK, Shift_JIS, Windows-1251 или другую кодировку выбирайте только для совместимости со старыми системами.

Файлы кодируются ровно в том виде, в каком они хранятся, без преобразования кодировки. Для изображений с готовыми фрагментами HTML и CSS используйте Изображение в Base64, а для data URI с автоматически определённым типом MIME — Файл в Base64.

Спецификация

АлфавитA-Z a-z 0-9 + /
Размер результата4 символа на каждые 3 байта (около 133%)
Дополнение= до длины, кратной 4 символам
СтандартRFC 4648, раздел 4
Учёт регистраДа

Примеры

Исходные данные (UTF-8)Результат
Hello, World!SGVsbG8sIFdvcmxkIQ==
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

Часто задаваемые вопросы

Почему мой результат Base64 не совпадает с результатом другого кодировщика?
Почти всегда дело в том, что различаются входные байты. Типичные причины: перевод строки в конце (команда оболочки echo добавляет его; используйте printf '%s' или echo -n), другая кодировка, окончания строк Windows в тексте или другие настройки дополнения, алфавита и переноса строк. Одни и те же байты с одинаковыми параметрами всегда дают одинаковый результат.
Как закодировать текст Unicode в Base64 на JavaScript?
btoa() принимает только символы до U+00FF и выдаёт ошибку для всех остальных. Сначала преобразуйте строку в байты UTF-8, например: btoa(String.fromCharCode(...new TextEncoder().encode(str))). В Node.js используйте Buffer.from(str, 'utf8').toString('base64').
Как закодировать данные в Base64 в командной строке?
В Linux или macOS выполните команду printf '%s' 'your text' | base64. GNU base64 по умолчанию переносит строки через каждые 76 символов (добавьте -w 0, чтобы получить одну строку), а openssl base64 — через 64 (добавьте -A).
Является ли кодирование Base64 шифрованием?
Нет. У Base64 нет ключа, и любой может вернуть исходные данные с помощью декодера Base64. Base64 нужен для передачи двоичных данных по каналам, которые принимают только текст, а не для сокрытия информации.
Насколько Base64 увеличивает объём данных?

Каждые 3 байта превращаются в 4 символа с округлением до полной группы, поэтому результат примерно на 33% больше. Перенос строк MIME добавляет ещё два байта (CRLF) на каждые 76 символов.