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: Строки Юникода, содержащие только 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.Может утверждать или повышать значение
ValueError
, если длина altchars не равна 2. Повышает значениеTypeError
, если altchars не является bytes-like object.
- 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
(по умолчанию), символы, которые не входят ни в обычный алфавит base64, ни в альтернативный алфавит, отбрасываются перед проверкой заполнения. Если значение validate равноTrue
, то эти неалфавитные символы во входных данных приводят кbinascii.Error
.Дополнительные сведения о строгой проверке base64 см. в разделе
binascii.a2b_base64()
Может утверждать или вызывать значение
ValueError
, если длина altchars не равна 2.
- 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 (oh), а также по желанию преобразовать цифру 1 (единицу) либо в букву I (eye), либо в букву L (el). Необязательный аргумент 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 (oh) и цифры 1 (единица) с буквой I (eye) или буквой L (el), все эти символы включены в расширенный шестнадцатеричный алфавит и не являются взаимозаменяемыми.
Добавлено в версии 3.10.
- base64.b16encode(s)¶
Закодируйте bytes-like object s, используя базу 16, и верните закодированный
bytes
.
- base64.b16decode(s, casefold=False)¶
Расшифруйте кодировку Base 16 bytes-like object или строку ASCII s и верните декодированный
bytes
.Необязательный casefold - это флаг, указывающий, допускается ли использование строчных букв в качестве входных данных. В целях безопасности значение по умолчанию равно
False
.Символ
binascii.Error
выводится, если s неправильно заполнен или если во входных данных присутствуют символы, отличные от алфавита.
- 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, используя базу данных 85 (как используется, например, в двоичных различиях в стиле 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. Значения input и output должны быть file objects. входные данные будут считываться до тех пор, пока
input.readline()
не вернет пустой объект bytes.
- base64.decodebytes(s)¶
Расшифруйте bytes-like object s, которые должны содержать одну или несколько строк данных, закодированных в base64, и верните декодированный
bytes
.Добавлено в версии 3.1.
- base64.encode(input, output)¶
Закодируйте содержимое двоичного входного файла и запишите полученные данные в кодировке base64 в выходной файл. входные и выходные значения должны быть file objects. входные данные будут считываться до тех пор, пока
input.read()
не вернет объект empty bytes.encode()
вставляет символ новой строки (b'\n'
) после каждых 76 байт выходных данных, а также гарантирует, что выходные данные всегда заканчиваются новой строкой., согласно RFC 2045 (ПАНТОМИМА).
- 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 (Многофункциональные почтовые расширения Интернета) Часть первая: Механизмы определения и описания формата текстов Интернет-сообщений
В разделе 5.2 «Кодирование контента для передачи в Base64» приводится определение кодировки base64.