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.Может утверждать или вызвать исключение
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 неверно дополнен или если в вводе присутствуют неалфавитные символы.
-
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 управляет тем, находится ли входная последовательность в формате Ascii85 Adobe (т. е. обрамлена <~ и ~>).
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.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); рекомендуется просмотреть раздел по безопасности для любого кода, развертываемого в продакшене.
См. также
-
Modulebinascii -
Модуль поддержки, содержащий преобразования ASCII в двоичный и двоичный в ASCII.
- RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Часть первая: механизмы указания и описания формата тел сообщений интернет-сообщений
-
Раздел 5.2 «Кодирование содержимого Base64» содержит определение кодирования base64.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/base64.html