Как пользоваться кодировщиком и декодером Base64
- Выберите Закодировать, чтобы превратить текст в Base64, или Декодировать, чтобы вернуть Base64 обратно в текст.
- Вставьте исходные данные. Текст обрабатывается как UTF-8, поэтому буквы с диакритикой, нелатинские алфавиты и эмодзи работают корректно.
- Включите опцию URL-безопасный, если результат будет использоваться в URL, имени файла или JWT.
- Скопируйте результат.
Кодирование и декодирование выполняются локально в вашем браузере; ничего из того, что вы вставляете, не загружается и не сохраняется.
Как работает Base64
Base64, описанный в RFC 4648, представляет произвольные двоичные данные с помощью 64 печатаемых символов ASCII: A–Z, a–z, 0–9, + и /. Он нужен для того, чтобы двоичное содержимое могло безопасно проходить через системы, рассчитанные на текст, такие как электронная почта, JSON, XML и заголовки HTTP.
Алгоритм берёт входные данные по 3 байта (24 бита) за раз и делит их на четыре 6-битные группы. Каждое 6-битное значение (0–63) выбирает один символ алфавита. Процесс хорошо виден на слове Man:
| Шаг | Значение |
|---|---|
| Байты | M=77, a=97, n=110 |
| 24 бита | 01001101 01100001 01101110 |
| 6-битные группы | 010011 010110 000101 101110 = 19, 22, 5, 46 |
| Base64 | TWFu |
Поскольку каждые 3 байта превращаются в 4 символа, результат Base64 примерно на 33% больше исходных данных (плюс переносы строк, если их вставляет формат, например MIME).
Дополнение символом =
Если длина входных данных не кратна трём, последняя группа дополняется (padding). Один оставшийся байт даёт два символа и ==; два оставшихся байта дают три символа и =. Например, Hi кодируется как SGk=.
URL-безопасный Base64
Стандартные символы + и / имеют особое значение в URL и путях к файлам. RFC 4648 §5 определяет алфавит base64url, в котором они заменены на - и _. Дополнение часто опускается. В JSON Web Token используется base64url без дополнения.
Стандартный: +/8=
URL-безопасный: -_8
Типичные ошибки
Base64 — это не шифрование
Любой может мгновенно декодировать Base64: ключа нет. Никогда не используйте его, чтобы «спрятать» пароли или ключи API. Для проверки целостности используйте хеш, полученный в генератора хешей, а для конфиденциальности — настоящее шифрование.
UTF-8 в JavaScript
Встроенная в браузер функция btoa() принимает только символы из диапазона Latin-1 и выдаёт ошибку на всех остальных. Сначала преобразуйте текст в байты UTF-8:
btoa("✓"); // InvalidCharacterError
const bytes = new TextEncoder().encode("✓");
btoa(String.fromCharCode(...bytes)); // "4pyT"
Смешение алфавитов
Декодирование данных base64url строгим стандартным декодером завершается ошибкой на символах - и _ или при отсутствии дополнения. Перед декодированием замените алфавит и снова добавьте дополнение до длины, кратной четырём символам.
Где встречается Base64
- Data URI встраивают небольшие файлы прямо в HTML или CSS:
data:image/png;base64,iVBORw0KGgo... - Базовая HTTP-аутентификация (Basic) отправляет
username:passwordв кодировке Base64.user:passпревращается вAuthorization: Basic dXNlcjpwYXNz, что элементарно декодируется, поэтому Basic auth можно использовать только через HTTPS. Такие заголовки можно изучить с помощью проверки HTTP-заголовков. - Вложения электронной почты (MIME), а также сертификаты и ключи PEM.
- JWT, заголовок и полезная нагрузка которых — это JSON в кодировке base64url. Прочитать их поможет декодер JWT.
printf 'text' | base64 кодирует, а base64 -d декодирует (в старых версиях macOS используется -D). Используйте printf или echo -n, чтобы не закодировать заодно и завершающий перевод строки.Часто задаваемые вопросы
Почему моя строка Base64 заканчивается на = или ==?
Это дополнение. Оно сообщает декодеру, сколько байт было в последней группе, если длина входных данных не делилась на три.
Безопасен ли Base64?
Нет. Это кодирование, а не шифрование. Оно вообще не обеспечивает конфиденциальности, а лишь делает двоичные данные пригодными для передачи в виде текста.
Почему закодированный результат больше исходных данных?
Каждый символ Base64 несёт 6 бит вместо 8, поэтому на 3 входных байта нужно 4 выходных символа — накладные расходы составляют примерно треть.
Чем Base64 отличается от base64url?
Различаются только два символа: base64url использует - и _ вместо + и / и обычно отбрасывает дополнение =, поэтому результат можно вставлять в URL без дополнительного экранирования.
Обновлено