Конвертер Base64
Введите текст, чтобы получить его Base64, или вставьте Base64, чтобы увидеть, что внутри. Не нужно указывать направление, а если на выходе картинка или файл, мы покажем их как картинку или файл.
Результат появляется по мере ввода. Текст и файлы преобразуются прямо на этой странице и к нам не отправляются. Base64 это способ записать байты буквами, а не шифрование: раскодировать его может кто угодно.
Как передать байты по каналам, созданным для текста
Электронная почта была задумана для простых латинских букв. Как и первые веб-адреса, как и JSON и XML сегодня. Фотография, PDF или криптографический ключ состоят из произвольных байтов, и для такого канала многие из этих байтов означают что-то особое или вообще ничего. Протолкните их как есть, и они придут повреждёнными.
Base64 решает эту проблему. Он переписывает любую последовательность байтов с помощью 64 безобидных символов: от A до Z, от a до z, от 0 до 9, + и /. Так путешествует каждое вложение в письме. Как и изображения, встроенные в таблицу стилей, и токены, которые держат вас в системе.
Три байта превращаются в четыре символа
Байт содержит 8 бит, а один из 64 символов может обозначать 6 бит. Поэтому кодировщик берёт по 3 байта (24 бита) и режет их на четыре группы по 6 бит. Каждая группа выбирает один символ из алфавита.
text M a n
bytes 01001101 01100001 01101110
6 bits 010011 010110 000101 101110
Base64 T W F uОтсюда два побочных эффекта. Результат на треть длиннее исходных данных, примерно на 33 %, и чуть больше с переносами строк. А когда длина входа не делится на 3, последняя группа дополняется одним или двумя знаками =, это называется выравниванием (padding). Ma даёт TWE=, а M даёт TQ==. Выравнивание не несёт данных, поэтому некоторые системы его опускают.
Стандартный, URL-safe, MIME
| Вариант | Символы 63 и 64 | Выравнивание | Где встречается |
|---|---|---|---|
| Стандартный | + / | Да | Data URI, HTTP Basic-аутентификация, ключи PEM |
| URL-safe (Base64URL) | - _ | Обычно нет | JSON Web Token, ссылки, имена файлов |
| MIME | + / | Да | Вложения в письмах, с переносом строки каждые 76 символов |
При декодировании этот инструмент принимает их все сразу: любой алфавит, с выравниванием или без, пробелы и переносы строк где угодно. Затем он сообщает, какой вариант увидел. Символы вне алфавита перечисляются с их позицией и пропускаются. Длина, при которой остаётся один лишний символ, отмечается. Один символ содержит 6 бит и не может составить байт, значит, что-то обрезано.
Текст это прежде всего байты
Base64 кодирует байты, а не буквы, поэтому текст сначала нужно превратить в байты. Этот инструмент использует UTF-8, кодировку почти всего веба. В UTF-8 латинская буква без диакритики занимает 1 байт, é и кириллические буквы по 2, большинство китайских или японских иероглифов по 3, а эмодзи 4. Вот почему одна é превращается в w6k=.
Классическая ошибка в том, чтобы пропустить этот шаг. В JavaScript btoa("é") возвращает 6Q==, байт в Latin-1, а btoa("👍") выбрасывает ошибку. На обратном пути atob() выдаёт é там, где была é. Решение: TextEncoder перед кодированием и TextDecoder после декодирования.
Когда декодированные байты не являются корректным UTF-8, инструмент не вываливает на вас мусор. Он смотрит на первые байты, по которым определяется большинство форматов файлов (распознаются PNG, JPEG, GIF, WebP, PDF, ZIP и gzip), показывает превью картинки, предлагает результат как файл и выводит начало в шестнадцатеричном виде.
Он ничего не скрывает
У Base64 нет ни ключа, ни секрета. Декодирование это тот же рецепт, прочитанный в обратном порядке, и он есть в каждом языке программирования. Пароль, «защищённый» Base64, это пароль открытым текстом с лишними шагами. Возьмите HTTP-заголовок Authorization: Basic dXNlcjpwYXNz, который кто угодно превратит обратно в user:pass.
data: URI вроде data:image/png;base64,iVBORw0… помещает целый файл внутрь адреса. Для крошечной иконки это экономит один запрос. За всё, что крупнее, вы платите лишними 33 %, и файл больше нельзя кешировать отдельно.
Частые вопросы
Base64 это шифрование?
Нет. Это кодировка, открытый и обратимый способ записать байты 64 печатными символами. Ключа нет, поэтому декодировать может кто угодно. Используйте его для передачи данных, но никогда для их защиты.
Почему Base64 заканчивается одним или двумя знаками равенства?
Кодировщик работает группами по 3 байта. Когда в последней группе только 1 или 2 байта, результат дополняется == или =, чтобы его длина оставалась кратной 4. Эти знаки не несут данных, и в URL-safe Base64 их часто опускают.
Чем Base64 отличается от Base64URL?
Двумя символами. Стандартный Base64 использует + и /, которые оба имеют значение в веб-адресах. Base64URL заменяет их на - и _ и обычно отбрасывает выравнивание =. Данные внутри те же.
Почему после декодирования кириллица, акценты или эмодзи превращаются в кракозябры?
Декодер прочитал байты не в той кодировке текста, обычно в Latin-1, когда текст был в UTF-8. Тогда вы и видите é вместо é. Декодируйте байты как UTF-8 (в JavaScript с помощью TextDecoder), и текст вернётся целым.
Насколько больше становится файл в Base64?
Примерно на 33 %, потому что каждые 3 байта превращаются в 4 символа. Изображение на 300 KB становится примерно 400 KB текста, плюс около 2,6 %, если строки переносятся каждые 76 символов для почты.
Как превратить изображение в data URI?
Перетащите изображение на инструмент. Вы получите Base64 и полный адрес data:image/…;base64,…, который можно вставить в атрибут src или в CSS url(). Используйте это для маленьких изображений в несколько килобайт.