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

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


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

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

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

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

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

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

Современный интерфейс обеспечивает:

base64.b64encode(s, altchars=None)

Закодируйте bytes-like object s с помощью Base64 и верните закодированный bytes.

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

base64.b64decode(s, altchars=None, validate=False)

Декодирует Base64 закодированную bytes-like object или ASCII строку s и возвращает декодированную bytes.

Необязательное altchars должно быть строкой bytes-like object или ASCII длиной не менее 2 (дополнительные символы игнорируются), которая определяет альтернативный алфавит, используемый вместо символов + и /.

Если s неправильно заполнено, то возникает исключение binascii.Error.

Если validate имеет значение False (по умолчанию), то символы, не входящие ни в обычный алфавит base-64, ни в альтернативный алфавит, отбрасываются до проверки набивки. Если validate равно True, то эти неалфавитные символы во входных данных приводят к ошибке binascii.Error.

base64.standard_b64encode(s)

Закодируйте bytes-like object s, используя стандартный алфавит Base64, и верните закодированное bytes.

base64.standard_b64decode(s)

Декодирует bytes-like object или ASCII-строку s, используя стандартный алфавит Base64, и возвращает декодированную bytes.

base64.urlsafe_b64encode(s)

Закодируйте bytes-like object s, используя безопасный для URL и файловой системы алфавит, который подставляет - вместо + и _ вместо / в стандартный алфавит Base64, и верните закодированный bytes. Результат все еще может содержать =.

base64.urlsafe_b64decode(s)

Декодируйте bytes-like object или ASCII-строку s, используя безопасный для URL и файловой системы алфавит, который подставляет - вместо + и _ вместо / в стандартный алфавит Base64, и верните декодированный bytes.

base64.b32encode(s)

Закодируйте bytes-like object s с помощью Base32 и верните закодированный bytes.

base64.b32decode(s, casefold=False, map01=None)

Декодирует Base32 закодированную bytes-like object или ASCII строку s и возвращает декодированную bytes.

Необязательный casefold - это флаг, указывающий, допустим ли строчный алфавит в качестве входных данных. В целях безопасности по умолчанию используется значение False.

RFC 4648 позволяет по желанию отобразить цифру 0 (ноль) на букву O (о), а цифру 1 (единица) - на букву I (глаз) или L (эль). Необязательный аргумент map01, если он не None, указывает, на какую букву должна быть сопоставлена цифра 1 (если map01 не None, цифра 0 всегда сопоставляется с буквой O). В целях безопасности по умолчанию используется None, так что 0 и 1 не допускаются на входе.

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

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)

Закодируйте bytes-like object s с помощью Base16 и верните закодированный bytes.

base64.b16decode(s, casefold=False)

Декодирует Base16 закодированную bytes-like object или ASCII строку s и возвращает декодированную bytes.

Необязательный casefold - это флаг, указывающий, допустим ли строчный алфавит в качестве входных данных. В целях безопасности по умолчанию используется значение False.

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

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

Закодируйте bytes-like object 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 строку bytes-like object или ASCII строку b и верните декодированную строку bytes.

foldspaces - это флаг, определяющий, следует ли принимать короткую последовательность „y“ в качестве сокращения для 4 последовательных пробелов (ASCII 0x20). Эта функция не поддерживается «стандартной» кодировкой Ascii85.

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

ignorechars должна быть строкой bytes-like object или ASCII, содержащей символы, которые следует игнорировать при вводе. Она должна содержать только пробельные символы, и по умолчанию содержит все пробельные символы в ASCII.

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

base64.b85encode(b, pad=False)

Закодируйте bytes-like object b с помощью base85 (как это используется, например, в бинарных диффах в стиле git) и верните закодированное bytes.

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

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

base64.b85decode(b)

Декодировать кодированную по base85 строку bytes-like object или ASCII строку b и вернуть декодированную строку bytes. При необходимости неявно удаляются вставки.

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

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

base64.decode(input, output)

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

base64.decodebytes(s)

Декодируйте bytes-like object s, который должен содержать одну или несколько строк данных в кодировке base64, и верните декодированный bytes.

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

base64.encode(input, output)

Кодирует содержимое двоичного файла input и записывает полученные данные в кодировке base64 в файл output. input и output должны быть file objects. input будет считываться до тех пор, пока input.read() не вернет пустой объект bytes. encode() вставляет символ новой строки (b'\n') после каждых 76 байт вывода, а также гарантирует, что вывод всегда заканчивается новой строкой, согласно RFC 2045 (MIME).

base64.encodebytes(s)

Закодируйте bytes-like object 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); рекомендуется просмотреть раздел о безопасности для любого кода, развернутого на производстве.

См.также

Модуль binascii

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

RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Часть первая: Механизмы для спецификации и описания формата тел сообщений Интернета

Раздел 5.2, «Base64 Content-Transfer-Encoding», содержит определение кодировки base64.

Вернуться на верх