Введение

Группа схем кодирования бинарных данных в текст с использованием 64 символов (плюс дополнение)
В компьютерном программировании Base64 — это группа схем кодирования бинарных данных в текст, которая преобразует бинарные данные в последовательность печатаемых символов, ограниченную набором из 64 уникальных символов. В частности, исходные бинарные данные берутся по 6 бит за раз, после чего эта группа из 6 бит сопоставляется одному из 64 уникальных символов. Как и все схемы кодирования бинарных данных в текст, Base64 предназначена для передачи данных, хранящихся в бинарных форматах, по каналам, которые надёжно поддерживают только текстовый контент. Base64 особенно распространена в World Wide Web, где одно из её применений — возможность встраивать файлы изображений или другие двоичные объекты в текстовые файлы, такие как HTML и CSS. Base64 также широко используется для отправки вложений по электронной почте, поскольку SMTP – в своей первоначальной форме – был разработан для передачи только 7-битных символов ASCII. Кодирование вложения в Base64 перед отправкой и последующее декодирование при получении гарантирует, что старые SMTP-серверы не будут препятствовать передаче вложения. Кодирование Base64 приводит к увеличению размера на 33–37% по сравнению с исходным объёмом бинарных данных (33% за счёт самого кодирования; до 4% дополнительно из-за вставленных разрывов строк).

Дизайн

Конкретный набор из 64 символов, выбранных для представления 64 цифровых значений в системе счисления, может различаться в зависимости от реализации. Общая стратегия заключается в выборе 64 символов, которые широко используются в большинстве кодировок и при этом являются печатаемыми. Такая комбинация снижает вероятность изменения данных при передаче через информационные системы, такие как электронная почта, которые традиционно не поддерживали 8-битные данные. Например, реализация Base64 в MIME использует символы A–Z, a–z и 0–9 для первых 62 значений. Другие варианты обладают аналогичным свойством, но отличаются символами, используемыми для последних двух значений; пример – UTF-7. Первые реализации этого типа кодирования создавались для организации связи по модему между системами, работающими под одной операционной системой – например, uuencode для UNIX и BinHex для TRS-80 (впоследствии адаптированный для Macintosh) – и поэтому могли опираться на большее количество предположений о том, какие символы можно использовать без риска. Например, uuencode использует прописные буквы, цифры и множество знаков препинания, но не использует строчные буквы.

Почтовые отправления с повышенной конфиденциальностью

Первое известное стандартизированное использование кодирования, теперь называемого MIME Base64, было в протоколе Privacy Enhanced Electronic Mail (PEM), предложенном в 1987 году. PEM определяет схему "печатаемого кодирования", которая использует кодирование Base64 для преобразования произвольной последовательности октетов в формат, который может быть выражен в коротких строках из 6-битных символов, как того требуют протоколы передачи, такие как SMTP. Текущая версия PEM (определенная в) использует алфавит из 64 символов, состоящий из прописных и строчных латинских букв (A–Z, a–z), цифр (0–9) и символов + и /. Символ = также используется в качестве символа дополнения. Алфавит "Modified Base64" состоит из алфавита MIME Base64, но не использует символ дополнения "=". UTF-7 предназначен для использования в заголовках электронной почты (определенных в), и символ "=" зарезервирован в этом контексте как символ экранирования для кодирования "quoted-printable". Modified Base64 просто опускает дополнение и заканчивается сразу после последней цифры Base64, содержащей полезные биты, оставляя до трех неиспользуемых битов в последней цифре Base64.

OpenPGP

OpenPGP, описанный в , описывает кодирование Radix 64, также известное как "ASCII armor". Radix 64 идентичен кодированию "Base64", описанному в MIME, с добавлением необязательного 24-битного CRC. Контрольная сумма вычисляется для входных данных перед кодированием; затем контрольная сумма кодируется тем же алгоритмом Base64 и, с префиксом в виде символа "=", добавляется к закодированным выходным данным.

RFC 3548

, озаглавленный «Кодировки данных Base16, Base32 и Base64», является информационным (не нормативным) документом, который пытается унифицировать спецификации кодировок Base64, альтернативных алфавитных кодировок, а также кодировок Base32 (которая используется редко) и Base16. Если реализации не соответствуют спецификации, ссылающейся на и явно требующей иного, RFC 3548 запрещает реализациям генерировать сообщения, содержащие символы, не входящие в кодирующий алфавит, или без добавления символов заполнения, и устанавливает, что декодеры должны отклонять данные, содержащие символы, не входящие в кодирующий алфавит. Некоторые варианты допускают или требуют исключение символов заполнения «=», чтобы избежать их путаницы с разделителями полей, или требуют, чтобы любое такое заполнение было закодировано в процентах. Некоторые библиотеки кодируют символ «=» в «.», что потенциально может привести к уязвимости приложений к атакам с использованием относительных путей, когда имя папки кодируется на основе пользовательских данных.

JavaScript (DOM Web API) (показать на карте)

Методы `atob` и `btoa` JavaScript, определенные в черновике спецификации HTML5, предоставляют функциональность кодирования и декодирования в кодировке Base64 для веб-страниц. Метод `btoa` добавляет символы дополнения к выходной строке, но они не обязательны во входных данных для метода `atob`.