18.12. base64RFC 3548: Base16, Base32, Base64 数据编码

本模块提供依据 RFC 3548的规定进行数据编码和解码。该标准定义Base16、Base32和 Base64算法用于编码和解码任意二进制字符串为文本字符串,因为文本字符串可以安全地通过电子邮件发送、 作为URL的一部分或作为HTTP POST请求的一部分。该编码算法不同于uuencode程序。

此模块提供两个接口。新式接口支持使用所有三种符号系统编码和解码字符串对象。旧版接口提供可编码和解码类文件对象以及字符串的接口,但只使用Base64的标准符号。

在Python 2.4中引入的新式接口提供:

base64.b64encode(s[, altchars])

对字符串使用 Base64 进行编码。

s是要编码的字符串。可选的altchars必须是一个长度至少为2的字符串(多余的字符将被忽略),它表示+/字符的替代字母表。这允许应用程序生成的URL或文件系统安全的Base64字符串。默认值为None表示使用标准的Base64字母表。

返回已编码的字符串。

base64.b64decode(s[, altchars])

解码 Base64 编码的字符串。

s是要解码的字符串。可选的altchars必须是一个长度至少为2的字符串(多余的字符将被忽略),它表示+/字符的替代字母表。

返回已解码的字符串。如果s有错误的填充字符或有非字母表字符出现在字符串中,则引发TypeError

base64.standard_b64encode(s)

使用标准的Base64字母表编码字符串s

base64.standard_b64decode(s)

使用标准的Base64字母表解码字符串s

base64.urlsafe_b64encode(s)

使用URL安全的字母表编码字符串s,以-_分别替换标准Base64字母表中的+/结果仍然可以包含=

base64.urlsafe_b64decode(s)

使用URL安全的字母表解码字符串s,以-_分别替换标准Base64字母表中的+/

base64.b32encode(s)

使用Base32编码字符串。s是要编码的字符串。返回已编码的字符串。

base64.b32decode(s[, casefold[, map01]])

dfd

s是要解码的字符串。可选casefold是一个标志,指定是否可以接受小写字母作为输入。出于安全目的,默认值为False

RFC 3548允许数字0映射到字母O,数字1映射到字母I或字母L。可选参数map01不为None时,指定数字1应该映射到哪个字母(当map01不是None时,数字0始终映射到字母O)。出于安全目的缺省值为None,以便在输入中不允许0和1。

返回已解码的字符串。如果s有错误的填充字符或有非字母表字符出现在字符串中,则引发TypeError

base64.b16encode(s)

使用Base16编码字符串。

s是要编码的字符串。返回已编码的字符串。

base64.b16decode(s[, casefold])

对Base16编码的字符串进行解码。

s是要解码的字符串。可选casefold是一个标志,指定是否可以接受小写字母作为输入。出于安全目的,默认值为False

返回已解码的字符串。如果s有错误的填充字符或有非字母表字符出现在字符串中,则引发TypeError

旧版接口:

base64.decode(input, output)

解码input文件的内容并将产生的二进制数据写入output文件。inputoutput必须要么是文件对象或模仿文件对象接口的对象。input将被读取直到input.read()返回一个空字符串。

base64.decodestring(s)

解码字符串s,它必须包含一行或多行base64编码的数据,返回一个字符串,包含生成的二进制数据。

base64.encode(input, output)

编码input文件的内容并将产生的二进制数据写入output文件。inputoutput必须要么是文件对象或模仿文件对象接口的对象。input将被读取直到input.read()返回一个空字符串。encode()返回编码的数据并在末尾加一个换行符('\n')。

base64.encodestring(s)

编码字符串s,它可以包含任意的二进制数据,返回一个包含一行或多行base64编码数据的字符串。encodestring()返回的包含一行或多行base64编码数据的字符串总是包含一个末尾换行符('\n')。

该模块的示例用法:

>>> import base64
>>> encoded = base64.b64encode('data to be encoded')
>>> encoded
'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
'data to be encoded'

请参见

Module binascii
Support module containing ASCII-to-binary and binary-to-ASCII conversions.
RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
Section 5.2, “Base64 Content-Transfer-Encoding,” provides the definition of the base64 encoding.