Base64: кодирование и декодирование

Вставьте Base64, чтобы прочитать его, либо введите текст или выберите файл, чтобы закодировать. UTF-8 обрабатывается правильно, понимаются оба алфавита и отсутствующее дополнение, а неверные данные показываются на том символе, где они ломаются.

Направление
Переводы строк и пробелы игнорируются. Подходят стандартный и URL-безопасный алфавиты, с дополнением = и без него, а также URL data:.

Вставьте Base64 в поле, чтобы декодировать его.

Base64 встречается в работе с серверами повсюду: секреты Kubernetes, ключи SSH, заголовки basic-auth, сертификаты. Ищете сам сервер? Сейчас от 3,02 € в месяц, на выбор: 2 226 серверов.

Работает в вашем браузере: ничего из введённого не отправляется на сервер.

Как работает Base64

Base64 записывает любые байты с помощью 64 безопасных символов, чтобы двоичные данные проходили через системы, рассчитанные на текст: e-mail, JSON, URL, заголовки HTTP. Каждые 3 байта (24 бита) превращаются в 4 символа по 6 бит. Если данные не делятся на группы по 3 байта, последняя группа короче, и знаки = дополняют её до 4 символов.

M        a        n
01001101 01100001 01101110
010011 010110 000101 101110
T      W      F      u        →  TWFu

Сначала текст превращается в байты, и эта страница использует для этого UTF-8 — кодировку, которую ожидает почти любая система. Поэтому «é» здесь превращается в w6k=, а встроенная функция браузера btoa() на таких символах выдаёт ошибку. Вариант URL-safe из RFC 4648 заменяет + и / на - и _, которые не нужно экранировать в адресах и именах файлов, и часто отбрасывает дополнение. Его используют JSON Web Token.

При декодировании страница принимает оба алфавита, отсутствующее дополнение, переводы строк и префикс data:. Если символ не относится к Base64, она говорит, какой именно и где. Если байты не являются корректным текстом UTF-8, они показываются в шестнадцатеричном виде, а при скачивании тип файла определяется по первым байтам.

Пример

Слово «foobar» — это 6 байт, поэтому оно кодируется в 8 символов без дополнения: Zm9vYmFy. «fooba» — это 5 байт, и оно получает один знак «=»: Zm9vYmE=. Одна «f» превращается в Zg==. Это тестовые значения из RFC 4648.

Вопросы

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

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

Почему Base64 больше оригинала?

Каждые 3 байта превращаются в 4 символа, поэтому результат примерно на 33 % больше, плюс до двух знаков =. Переводы строк через каждые 76 символов, как в e-mail, добавляют ещё немного. Это плата за то, что используются только безопасные текстовые символы.

Что такое URL-безопасный Base64?

Вариант из раздела 5 RFC 4648. Он использует - и _ вместо + и /, которые имеют особый смысл в URL и именах файлов, и часто опускает дополнение =. Его используют JSON Web Token и многие API. Эта страница декодирует оба варианта, а кодировать может в любом: для этого есть параметр выше.

Почему при декодировании получаются странные символы?

Либо это не текст, а, например, изображение, архив или ключ, либо текст закодирован не в UTF-8. Эта страница показывает двоичные данные в шестнадцатеричном виде и позволяет скачать их как файл. Если в остальном читаемом тексте несколько неверных букв, источник, скорее всего, использовал Latin-1 или Windows-1252.

Как декодировать Base64 в командной строке?

В Linux: echo 'Zm9vYmFy' | base64 -d. В macOS: base64 -D, а в новых версиях base64 --decode. Чтобы закодировать файл: base64 -w 0 file в Linux для одной длинной строки, base64 -i file в macOS. В PowerShell: [Convert]::FromBase64String('Zm9vYmFy').