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


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

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

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

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

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

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

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

base64.b64encode(s, altchars=None)

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

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

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.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 3548 допускает необязательное сопоставление цифры 0 (ноль) с буквой O (oh) и необязательное сопоставление цифры 1 (единица) либо с буквой I (eye), либо с буквой L (el). Необязательный аргумент map01, если он не None, указывает, какой букве должна быть сопоставлена цифра 1 (если map01 не является None, цифра 0 всегда отображается на букву O). В целях безопасности по умолчанию используется None, поэтому 0 и 1 не допускаются на входе.

Возникает binascii.Error, если s заполнен неправильно или если во входных данных присутствуют неалфавитные символы.

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\v')

Декодирует строку байтоподобного объекта в кодировке 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 истинно, ввод дополняется b'\0', поэтому перед кодированием его длина кратна 4 байтам.

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

base64.b85decode(b)

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

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

Устаревший интерфейс:

base64.decode(input, output)

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

base64.decodebytes(s)

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

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

base64.decodestring(s)

Устаревший псевдоним decodebytes().

Не рекомендуется, начиная с версии 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.

base64.encodestring(s)

Устаревший псевдоним encodebytes().

Не рекомендуется, начиная с версии 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'

См.также

Модуль binascii
Модуль поддержки, содержащий преобразования ASCII в двоичные и двоичные в ASCII.
RFC 1521 — MIME (многоцелевые расширения почты Интернета), часть первая: механизмы определения и описания формата тел сообщений Интернета
Раздел 5.2, «Base64 Content-Transfer-Encoding», содержит определение кодировки base64.