Содержание страницы
base64 – кодирование данных Base16, Base32, Base64, Base85¶base64 – Base16, Base32, Base64, Base85 Data Encodings
Исходный код: Lib/base64.py
Этот модуль предоставляет функции для кодирования двоичных данных в печатные символы ASCII и декодирования таких кодировок обратно в двоичные данные. Сюда входят кодировки, указанные в RFC 4648 (Base64, Base32 и Base16), кодировка Base85, указанная в PDF 2.0, и нестандартные варианты Base85, используемые в других местах.
Модуль предоставляет два интерфейса. Современный интерфейс поддерживает кодирование байтоподобных объектов в ASCII bytes и декодирование байтоподобных объектов или строк, содержащих ASCII, в bytes. Поддерживаются оба алфавита base-64, определённых в RFC 4648 (обычный и безопасный для URL и файловых систем).
Устаревший интерфейс не поддерживает декодирование из строк, но предоставляет функции для кодирования и декодирования в файловые объекты и из них. Он поддерживает только стандартный алфавит Base64 и добавляет символы новой строки каждые 76 символов, как указано в RFC 2045. Обратите внимание: если вам нужна поддержка RFC 2045, возможно, стоит обратить внимание на пакет email.
Изменено в версии 3.3: Теперь функции декодирования современного интерфейса принимают строки Unicode, содержащие только ASCII.
Изменено в версии 3.4: Теперь все функции кодирования и декодирования в этом модуле принимают любые байтоподобные объекты. Добавлена поддержка Ascii85/Base85.
Кодировки RFC 4648¶RFC 4648 Encodings
Кодировки RFC 4648 подходят для кодирования двоичных данных, чтобы их можно было безопасно отправлять по электронной почте, использовать как части URL или включать в тело HTTP POST-запроса.
- base64.b64encode(s, altchars=None)¶
Кодирует байтоподобный объект s с помощью Base64 и возвращает закодированный
bytes.Необязательный altchars должен быть байтоподобным объектом длины 2, который задаёт альтернативный алфавит для символов
+и/. Это позволяет приложению, например, генерировать строки Base64, безопасные для URL или файловых систем. По умолчанию используетсяNone, для которого применяется стандартный алфавит Base64.Может вызвать утверждение (assert) или возбудить
ValueError, если длина altchars не равна 2. ВозбуждаетTypeError, если altchars не является байтоподобным объектом.
- base64.b64decode(s, altchars=None, validate=False)¶
Декодирует байтоподобный объект, закодированный в Base64, или ASCII-строку s и возвращает декодированный
bytes.Необязательный altchars должен быть байтоподобным объектом или ASCII-строкой длины 2, которая задаёт альтернативный алфавит, используемый вместо символов
+и/.Исключение
binascii.Errorвызывается, если s имеет неправильное дополнение.Если validate равен
False(по умолчанию), символы, не входящие ни в обычный алфавит base-64, ни в альтернативный, отбрасываются перед проверкой дополнения. Если validate равенTrue, такие символы, не являющиеся буквами алфавита, приводят кbinascii.Error.Дополнительную информацию о строгой проверке base64 см. в
binascii.a2b_base64()Может вызвать утверждение или возбудить
ValueError, если длина altchars не равна 2.
- base64.standard_b64encode(s)¶
Кодирует байтоподобный объект s с использованием стандартного алфавита Base64 и возвращает закодированный
bytes.
- base64.standard_b64decode(s)¶
Декодирует байтоподобный объект или ASCII-строку s с использованием стандартного алфавита Base64 и возвращает декодированный
bytes.
- base64.urlsafe_b64encode(s)¶
Кодирует байтоподобный объект s с использованием алфавита, безопасного для URL и файловых систем, который подставляет
-вместо+и_вместо/в стандартном алфавите Base64, и возвращает закодированныйbytes. Результат всё ещё может содержать=.
- base64.urlsafe_b64decode(s)¶
Декодирует байтоподобный объект или ASCII-строку s с использованием алфавита, безопасного для URL и файловых систем, который подставляет
-вместо+и_вместо/в стандартном алфавите Base64, и возвращает декодированныйbytes.
- base64.b32encode(s)¶
Кодирует байтоподобный объект s с помощью Base32 и возвращает закодированный
bytes.
- base64.b32decode(s, casefold=False, map01=None)¶
Декодирует закодированный Base32 байтоподобный объект или ASCII-строку s и возвращает декодированные
bytes.Необязательный флаг casefold указывает, допускается ли строчный алфавит на входе. Из соображений безопасности по умолчанию используется
False.RFC 4648 допускает необязательное отображение цифры 0 (ноль) на букву O (о) и необязательное отображение цифры 1 (один) на букву I (ай) или L (эль). Необязательный аргумент map01, если он не равен
None, указывает, на какую букву должна отображаться цифра 1 (когда map01 не равенNone, цифра 0 всегда отображается на букву O). Из соображений безопасности по умолчанию используетсяNone, так что 0 и 1 не допускаются на входе.Исключение
binascii.Errorвозникает, если s имеет некорректное дополнение или если во входных данных присутствуют неалфавитные символы.
- base64.b32hexencode(s)¶
Аналогично
b32encode(), но использует расширенный шестнадцатеричный алфавит, как определено в RFC 4648.Добавлено в версии 3.10.
- base64.b32hexdecode(s, casefold=False)¶
Аналогично
b32decode(), но использует расширенный шестнадцатеричный алфавит, как определено в RFC 4648.Эта версия не допускает отображения цифры 0 (ноль) на букву O (о) и цифры 1 (один) на букву I (ай) или L (эль); все эти символы входят в расширенный шестнадцатеричный алфавит и не являются взаимозаменяемыми.
Добавлено в версии 3.10.
- base64.b16encode(s)¶
Кодирует байтоподобный объект s с помощью Base16 и возвращает закодированные
bytes.
- base64.b16decode(s, casefold=False)¶
Декодирует закодированный Base16 байтоподобный объект или ASCII-строку s и возвращает декодированные
bytes.Необязательный флаг casefold указывает, допускается ли строчный алфавит на входе. Из соображений безопасности по умолчанию используется
False.Исключение
binascii.Errorвозникает, если s имеет некорректное дополнение или если во входных данных присутствуют неалфавитные символы.
Кодировки Base85¶Base85 Encodings
Кодировка Base85 – это семейство алгоритмов, которые представляют четыре байта с помощью пяти ASCII-символов. Изначально реализованная в утилите Unix btoa(1), её версия позже была принята Adobe в языке PostScript и стандартизирована в PDF 2.0 (ISO 32000-2). Эта версия, как в варианте btoa, так и в варианте PDF, реализована в a85encode().
Отдельная версия, использующая другой набор выходных символов, была определена как первоапрельская шутка в RFC 1924, но теперь используется Git и другим программным обеспечением. Эта версия реализована в b85encode().
Наконец, третья версия, использующая еще один набор выходных символов, предназначенный для безопасного включения в строки языков программирования, определена ZeroMQ и реализована здесь в z85encode().
Функции, представленные в этом модуле, различаются тем, как они обрабатывают следующее:
Нужно ли включать и ожидать обрамляющие маркеры
<~и~>.Нужно ли разбивать входные данные на несколько строк.
Набор ASCII-символов, используемых для кодирования.
Компактное кодирование последовательностей пробелов и нулевых байтов.
Кодирование байтов нулевого дополнения, применяемых к входным данным.
Обратитесь к документации отдельных функций для получения дополнительной информации.
- base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)¶
Кодирует байтоподобный объект b с помощью Ascii85 и возвращает закодированные
bytes.foldspaces – необязательный флаг, который использует специальную короткую последовательность 'y' вместо 4 последовательных пробелов (ASCII 0x20), как поддерживается в 'btoa'. Эта возможность не поддерживается стандартным кодированием, используемым в PDF.
wrapcol управляет добавлением в выходные данные символов новой строки (
b'\n'). Если это значение не равно нулю, каждая выходная строка будет длиной не более этого количества символов, не считая завершающей новой строки.pad управляет тем, сохраняется ли нулевое дополнение, примененное к концу входных данных, полностью в результирующем кодировании, как это делает
btoa, создавая выходные данные, кратные 5 байтам. Это не является частью стандартного кодирования, используемого в PDF, поскольку не сохраняет длину данных.adobe управляет, обрамляется ли закодированная последовательность байтов маркерами
<~и~>, как в строковом литерале PostScript base-85. Обратите внимание: хотя потоки ASCII85Decode в документах PDF должны завершаться~>, они не должны использовать начальный<~.Добавлено в версии 3.4.
- base64.a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\x0b')¶
Декодирует Ascii85-закодированный байтоподобный объект или ASCII-строку b и возвращает декодированный
bytes.foldspaces – это флаг, указывающий, следует ли принимать короткую последовательность 'y' как сокращение для 4 последовательных пробелов (ASCII 0x20). Эта возможность не поддерживается стандартным кодированием Ascii85, используемым в PDF и PostScript.
adobe управляет наличием маркеров
<~и~>. Хотя начальный<~не требуется, входные данные должны заканчиваться на~>, иначе будет вызваноValueError.ignorechars должен быть байтовой строкой, содержащей символы, которые следует игнорировать во входных данных. Она должна содержать только пробельные символы и по умолчанию включает все пробельные символы ASCII.
Добавлено в версии 3.4.
- base64.b85encode(b, pad=False)¶
Кодирует байтоподобный объект b с помощью base85 (используется, например, в двоичных diff-файлах в стиле git) и возвращает закодированный
bytes.Входные данные дополняются
b'\0', чтобы их длина была кратна 4 байтам перед кодированием. Если pad истинно, все результирующие символы сохраняются в выходных данных, которые всегда будут кратны 5 байтам, и поэтому длина данных может не сохраниться при декодировании.Добавлено в версии 3.4.
- base64.b85decode(b)¶
Декодирует base85-закодированный байтоподобный объект или ASCII-строку b и возвращает декодированный
bytes.Добавлено в версии 3.4.
- base64.z85encode(s)¶
Кодирует байтоподобный объект s с помощью Z85 (используется в ZeroMQ) и возвращает закодированный
bytes.Спецификация ZeroMQ требует, чтобы длина данных, закодированных Z85, была кратна 5 байтам. Чтобы получить корректные кадры данных, входные данные, передаваемые этой функции, необходимо дополнить до кратности 4 байтам.
Добавлено в версии 3.13.
- base64.z85decode(s)¶
Декодирует Z85-закодированный байтоподобный объект или ASCII-строку s и возвращает декодированный
bytes.Добавлено в версии 3.13.
Устаревший интерфейс¶Legacy Interface
- base64.decode(input, output)¶
Декодирует содержимое бинарного файла input и записывает полученные бинарные данные в файл output. input и output должны быть файловыми объектами. input будет читаться до тех пор, пока
input.readline()не вернёт пустой bytes-объект.
- base64.decodebytes(s)¶
Декодирует байтоподобный объект s, который должен содержать одну или несколько строк данных, закодированных в base64, и возвращает декодированный
bytes.Добавлено в версии 3.1.
- base64.encode(input, output)¶
Кодирует содержимое бинарного файла input и записывает полученные данные в кодировке base64 в файл output. input и output должны быть файловыми объектами. input будет читаться до тех пор, пока
input.read()не вернёт пустой bytes-объект.encode()вставляет символ новой строки (b'\n') после каждых 76 байт выходных данных, а также гарантирует, что выходные данные всегда заканчиваются новой строкой, в соответствии с RFC 2045 (MIME).
- base64.encodebytes(s)¶
Кодирует байтоподобный объект s, который может содержать произвольные бинарные данные, и возвращает
bytes, содержащее данные в кодировке base64, с символами новой строки (b'\n'), вставляемыми после каждых 76 байт выходных данных, и гарантирует наличие завершающего перевода строки в соответствии с RFC 2045 (MIME).Добавлено в версии 3.1.
Пример использования модуля:
>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
b'data to be encoded'
Вопросы безопасности¶Security Considerations
Новый раздел по вопросам безопасности был добавлен в RFC 4648 (раздел 12); рекомендуется ознакомиться с разделом безопасности для любого кода, развёртываемого в рабочей среде.
См. также
- Модуль
binascii Вспомогательный модуль, содержащий преобразования ASCII-в-двоичный и двоичный-в-ASCII.
- RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
Раздел 5.2, «Base64 Content-Transfer-Encoding», содержит определение кодировки base64.
- ISO 32000-2 Portable document format - Part 2: PDF 2.0
Раздел 7.4.3, «Фильтр ASCII85Decode», содержит определение кодировки Ascii85, используемой в PDF и PostScript, включая выходной набор символов и подробности сохранения длины данных с помощью нулевого дополнения и частичных выходных групп.
- ZeroMQ RFC 32/Z85
Раздел «Формальная спецификация» описывает набор символов, используемый в Z85.