Как пользоваться
- Введите или вставьте текст для кодирования. Чтобы закодировать байты, выберите Hex в параметре «Формат ввода», а чтобы закодировать файл, нажмите «Открыть файл».
- Оставьте в параметре «Кодировка текста» значение UTF-8, если принимающая система не ожидает другую кодировку.
- Настройте параметры: в большинстве случаев подходит вариант «Стандартный (RFC 4648)»; отключите дополнение, если получателю оно не нужно, и при необходимости включите перенос строк по 76 (MIME) или 64 (PEM) символа.
- Скопируйте результат в 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.is | QmFzZTY0Lmlz |
你好 | 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 в командной строке?
printf '%s' 'your text' | base64. GNU base64 по умолчанию переносит строки через каждые 76 символов (добавьте -w 0, чтобы получить одну строку), а openssl base64 — через 64 (добавьте -A).Является ли кодирование Base64 шифрованием?
Насколько Base64 увеличивает объём данных?
Каждые 3 байта превращаются в 4 символа с округлением до полной группы, поэтому результат примерно на 33% больше. Перенос строк MIME добавляет ещё два байта (CRLF) на каждые 76 символов.