Введение
Группа схем кодирования бинарных данных в текст с использованием 64 символов (плюс дополнение)
В компьютерном программировании Base64 — это группа схем кодирования бинарных данных в текст, которая преобразует бинарные данные в последовательность печатаемых символов, ограниченную набором из 64 уникальных символов. В частности, исходные бинарные данные берутся по 6 бит за раз, после чего эта группа из 6 бит сопоставляется одному из 64 уникальных символов. Как и все схемы кодирования бинарных данных в текст, Base64 предназначена для передачи данных, хранящихся в бинарных форматах, по каналам, которые надёжно поддерживают только текстовый контент. Base64 особенно распространена в World Wide Web, где одно из её применений — возможность встраивать файлы изображений или другие двоичные объекты в текстовые файлы, такие как HTML и CSS. Base64 также широко используется для отправки вложений по электронной почте, поскольку SMTP – в своей первоначальной форме – был разработан для передачи только 7-битных символов ASCII. Кодирование вложения в Base64 перед отправкой и последующее декодирование при получении гарантирует, что старые SMTP-серверы не будут препятствовать передаче вложения. Кодирование Base64 приводит к увеличению размера на 33–37% по сравнению с исходным объёмом бинарных данных (33% за счёт самого кодирования; до 4% дополнительно из-за вставленных разрывов строк).
In computer programming, Base64 is a group of binary to text encoding schemes that transforms binary data into a sequence of printable characters, limited to a set of 64 unique characters. More specifically, the source binary data is taken 6 bits at a time, then this group of 6 bits is mapped to one of 64 unique characters. As with all binary to text encoding schemes, Base64 is designed to carry data stored in binary formats across channels that only reliably support text content. Base64 is particularly prevalent on the World Wide Web where one of its uses is the ability to embed image files or other binary assets inside textual assets such as HTML and CSS files. Base64 is also widely used for sending e mail attachments, because SMTP – in its original form – was designed to transport 7 bit ASCII characters only. Encoding an attachment as Base64 before sending, and then decoding when received, assures older SMTP servers will not interfere with the attachment. Base64 encoding causes an overhead of 33–37% relative to the size of the original binary data (33% by the encoding itself; up to 4% more by the inserted line breaks).
Дизайн
Конкретный набор из 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`.