Что такое кодировка Base64? Первый пример с реальными байтами

Поймите назначение Base64, см. раздел Hello,становитесь SGVsbG8= и узнайте разницу между кодированием и шифрованием.

Base64 — это способ представления двоичных данных обычными текстовыми символами. Изображение, документ или фрагмент текста могут быть представлены в виде байтов. Когда системе нужны эти байты внутри текстового поля, Base64 обеспечивает обратимое написание, которое получатель сможет декодировать позже.

Небольшой пример

Текст Hello содержит пять ASCII байтов. Кодирование этих байтов дает SGVsbG8=. Декодирование этого значения возвращает те же пять байтов, которые затем можно прочитать как исходный текст. Знак равенства принадлежит последней группе кодировки; это не часть слова Hello.

Text:           Hello
Bytes in Hex:   48 65 6c 6c 6f
Base64:         SGVsbG8=
Decoded bytes:  48 65 6c 6c 6f

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

Где вы с этим столкнетесь

Общие примеры включают двоичное поле в JSON, встроенное изображение в Data URI и читаемые части определенных токенов. Окружающий формат обеспечивает контекст. Строка Base64 сама по себе не сообщает вам исходное имя файла, тип MIME, кодировку символов или достоверность содержимого.

Данные URI добавляют префикс, например data:image/png;base64,. Этот префикс описывает полезную нагрузку, но не является частью алфавита Base64. Некоторые декодеры понимают оболочку; другие ожидают только часть после запятой. Выбирайте подходящий инструмент или режим вместо случайного удаления незнакомых символов.

Три распространённых заблуждения

Во-первых, Base64 не является шифрованием: для его декодирования не требуется никакого секрета. Во-вторых, файлы не уменьшаются; обычный дополненный вывод примерно на треть больше исходных байтов. В-третьих, не каждый декодированный результат является текстом. Изображение может правильно декодироваться в байты, которые в текстовом поле выглядят как ерунда.

Если декодирование не удалось, проверьте исходный источник, выбранный алфавит и была ли строка усечена. Если это удастся, выберите подходящее представление: текст для допустимых текстовых байтов, шестнадцатеричный формат для проверки или загрузку файла для двоичных данных. Подробный алфавит Base64 и примеры определены в RFC 4648.