Spec-Zone.ru › Python 3.13

Кодирование данных base64 — Base16, Base32, Base64, Base85

Исходный код: Lib/base64.py

Этот модуль предоставляет функции для кодирования двоичных данных в печатные символы ASCII и декодирования таких кодировок обратно в двоичные данные. Он предоставляет функции кодирования и декодирования для кодировок, указанных в RFC 4648, который определяет алгоритмы Base16, Base32 и Base64, а также фактически стандартные кодировки Ascii85 и Base85.

Кодировки RFC 4648 подходят для кодирования двоичных данных, чтобы их можно было безопасно отправлять по электронной почте, использовать в качестве частей URL или включать в часть запроса HTTP POST. Алгоритм кодирования отличается от программы uuencode.

Этот модуль предоставляет два интерфейса. Современный интерфейс поддерживает кодирование объектов-подобных байтам в ASCII bytes и декодирование объектов-подобных байтам или строк, содержащих ASCII, в bytes. Поддерживаются оба алфавита Base-64, определённые в RFC 4648 (обычный, а также безопасный для URL и файловой системы).

Устаревший интерфейс не поддерживает декодирование из строк, но предоставляет функции для кодирования и декодирования в и из объектов файлов. Он поддерживает только стандартный алфавит Base64, и он добавляет новые строки каждые 76 символов в соответствии с RFC 2045. Обратите внимание, что если вам нужна поддержка RFC 2045, вам, вероятно, следует обратиться к пакету email вместо этого.

Изменено в версии 3.3: ASCII-только строки Unicode теперь принимаются функциями декодирования современного интерфейса.

Изменено в версии 3.4: Теперь все объекты, подобные байтам, принимаются всеми функциями кодирования и декодирования в этом модуле. Добавлена поддержка Ascii85/Base85.

Современный интерфейс предоставляет:

base64.b64encode(s, altchars=None)

Кодирует объект, подобный байтам s с помощью Base64 и возвращает закодированные bytes.

Необязательные altchars должны быть объектом, подобным байтам длиной 2, который задаёт альтернативный алфавит для символов + и /. Это позволяет приложению, например, генерировать строки Base64, безопасные для URL или файловой системы. По умолчанию используется None, для которого используется стандартный алфавит Base64.

Может утверждать или вызывать 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(), но использует расширенный алфавит HEX, как определено в RFC 4648.

Добавлен в версии 3.10.

END_OF_DOCUMENT_MARKER
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 неправильно дополнен или в вводе присутствуют символы, не являющиеся частью алфавита.

base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)

Кодирует объект типа байт b с использованием Ascii85 и возвращает закодированные bytes.

foldspaces — необязательный флаг, который использует специальную короткую последовательность ‘y’ вместо 4 последовательных пробелов (ASCII 0x20), как поддерживается ‘btoa’. Эта функция не поддерживается «стандартным» кодированием Ascii85.

wrapcol управляет тем, должны ли в выводе добавляться символы новой строки (b'\n'). Если это значение отлично от нуля, каждая строка вывода будет содержать не более этого количества символов, не считая завершающую новую строку.

pad управляет тем, дополняется ли входной данные до кратного 4 перед кодированием. Обратите внимание, что реализация btoa всегда дополняет.

adobe управляет тем, обрамляются ли закодированные байтовые последовательности символами <~ и ~>, используемыми в реализации Adobe.

Добавлен в версии 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.

adobe управляет тем, находится ли входная последовательность в формате Adobe Ascii85 (т.е. обрамлена символами <~ и ~>).

ignorechars должен быть объектом типа байт или строкой ASCII, содержащей символы, которые следует игнорировать из входных данных. В нём должны содержаться только символы пробелов, а по умолчанию содержатся все символы пробелов в ASCII.

Добавлен в версии 3.4.

base64.b85encode(b, pad=False)

Кодирует объект типа байт b с использованием base85 (как используется, например, в двоичных различиях Git-стиля) и возвращает закодированные bytes.

Если pad равно True, входные данные дополняются b'\0' до длины, кратной 4 байтам, перед кодированием.

Добавлен в версии 3.4.

base64.b85decode(b)

Декодирует закодированный в base85 объект типа байт или строку ASCII b и возвращает декодированные bytes. Дополнения неявно удаляются при необходимости.

Добавлен в версии 3.4.

base64.z85encode(s)

Кодирует объект типа байт s с помощью Z85 (как используется в ZeroMQ) и возвращает закодированные bytes. Для получения дополнительной информации см. спецификацию Z85.

Добавлен в версии 3.13.

base64.z85decode(s)

Декодирует закодированные в Z85 объект типа байт или строку ASCII s и возвращает декодированные bytes. Для получения дополнительной информации см. спецификацию Z85.

Добавлен в версии 3.13.

base64.decode(input, output)

Декодирует содержимое двоичного файла input и записывает полученные двоичные данные в файл output. input и output должны быть объектами файла. input будет читаться до тех пор, пока input.readline() не вернёт пустой объект типа байт.

base64.decodebytes(s)

Декодирует объект типа байт s, который должен содержать одну или несколько строк закодированных в base64 данных, и возвращает декодированные bytes.

Добавлен в версии 3.1.

base64.encode(input, output)

Кодирует содержимое двоичного файла input и записывает полученные закодированные в base64 данные в файл output. input и output должны быть объектами файла. input будет читаться до тех пор, пока input.read() не вернёт пустой объект типа байт. 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'

Основные соображения безопасности

В RFC 4648 (раздел 12) был добавлен новый раздел с соображениями безопасности; рекомендуется просмотреть раздел безопасности для любого кода, развернутого в рабочей среде.

См. также

Module binascii

Модуль поддержки, содержащий преобразования между ASCII и двоичными данными.

RFC 1521 - MIME (Многоцелевые расширения интернет-почты) Часть первая: механизмы указания и описания формата тел сообщений интернет-почты

Раздел 5.2, «Кодирование содержимого Base64», предоставляет определение кодирования Base64.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/base64.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API