19.6. base64 - Base16,Base32,Base64,Base85数据编码

源代码: Lib/base64.py

此模块提供将二进制数据编码为可打印ASCII字符并将此类编码解码回二进制数据的功能。它为在 RFC 3548中指定的编码提供编码和解码功能,该编码定义了Base16,Base32和Base64算法,以及事实上的标准Ascii85和Base85编码。

RFC 3548编码适用于编码二进制数据,以便它可以安全地通过电子邮件发送,用作URL的一部分,或作为HTTP POST请求的一部分。其编码算法与uuencode程序不同。

此模块提供两个接口。现代接口支持将类字节对象编码为ASCII字节,以及将类字节对象或包含ASCII的字符串解码为字节RFC 3548中定义的两个基本64字母表(普通字母表,和URL及文件系统安全的字母表)都支持。

传统接口不支持从字符串进行解码,但它提供从文件对象编码和解码的功能。它仅支持Base64标准字母表,并根据 RFC 2045每76个字符添加换行符。请注意,如果你要查找 RFC 2045支持,你可能希望查看email包。

在版本3.3中更改:现代接口的解码函数现在接受ASCII-only的Unicode字符串。

在版本3.4中更改:现在此模块中的所有编码和解码函数接受任何类字节对象添加对Ascii85/Base85的支持。

现代接口提供:

base64.b64encode(s, altchars=None)

使用Base64编码类字节对象s,并返回编码后的字节

可选的altchars必须是一个类字节对象,长度至少为2(忽略其他字符),它指定+/字符的替代字母。这允许应用生成URL或文件系统安全的Base64字符串。默认值为None,使用标准的Base64字母表。

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

解码Base64编码的类字节对象或ASCII字符串s并返回解码的字节

可选的altchars必须是一个类字节对象,长度至少为2(忽略其他字符),它指定+/字符的替代字母。

如果s未正确填充,则引发binascii.Error异常。

如果validateFalse(默认值),则在填充检查之前,将不在正常base-64字母表中或替代字母表中的字符丢弃。如果validateTrue,则输入中的这些非字母字符会导致binascii.Error

base64.standard_b64encode(s)

使用标准的Base64字母表编码类字节对象 s并返回编码的字节

base64.standard_b64decode(s)

使用标准的Base64字母表解码类字节对象或ASCII字符串s并返回解码的字节

base64.urlsafe_b64encode(s)

使用URL和文件系统安全的字母表编码类字节对象s,它用-_分别替换标准的Base64字母表中的+/,并返回编码的字节结果仍可包含=

base64.urlsafe_b64decode(s)

使用URL及文件系统安全的字母表解码类字节对象或ASCII字符串s,它将标准Base64字母表中的+替换为-/替换为_,并返回解码后的字节

base64.b32encode(s)

使用Base32编码类字节对象s并返回编码后的字节

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

解码Base32编码的bytes-like object或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。

如果s未正确填充或输入中存在非字母字符,则会引发binascii.Error

base64.b16encode(s)

使用Base16编码bytes-like object s并返回编码的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)

使用Ascii85编码bytes-like object b并返回编码的bytes

折叠空间是一个可选标志,使用特殊短序列“y”,而不是“btoa”支持的4个连续空格(ASCII 0x20)。“标准”Ascii85编码不支持此功能。

wrapcol控制输出是否应该添加换行符(b'\n')。如果这是非零,每个输出行将最多这个许多字符长。

pad控制输入在编码之前是否填充为4的倍数。注意,btoa实现总是垫。

adobe控制编码后的字节序列是否用<~ and ~>包围,用于Adobe实现。

新版本3.4。

base64.a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v')

解码Ascii85编码的bytes-like object或ASCII字符串b并返回解码的bytes

折叠空间是指定是否应接受“y”短序列作为4个连续空格(ASCII 0x20)的缩写的标志。“标准”Ascii85编码不支持此功能。

adobe控制输入序列是否为Adobe Ascii85格式(即框架)。

ignorechars应为bytes-like object或包含要从输入忽略的字符的ASCII字符串。这应该只包含空格字符,并且默认包含ASCII中的所有空格字符。

新版本3.4。

base64.b85encode(b, pad=False)

使用base85编码bytes-like object b(如git-style binary diffs)并返回编码的bytes

如果pad为真,则输入用b'\0'填充,因此其长度是编码前的4个字节的倍数。

新版本3.4。

base64.b85decode(b)

解码base85编码的bytes-like object或ASCII字符串b并返回解码的bytes如果需要,隐含地删除填充。

新版本3.4。

注意

Base85和Ascii85都有5到4的扩展因子(5个Base85或Ascii85字符可以编码4个二进制字节),而更好的Base64扩展因子为6到4。因此,当空间昂贵时,它们更有效。它们因细节(例如用于编码的字符映射)而不同。

传统接口:

base64.decode(input, output)

解码二进制输入文件的内容,并将生成的二进制数据写入输出文件。输入输出必须是file objects输入将被读取,直到input.readline()返回一个空字节对象。

base64.decodebytes(s)
base64.decodestring(s)

解码bytes-like object s,其中必须包含一行或多行base64编码数据,并返回解码的bytesdecodestring是一个已弃用的别名。

版本3.1中的新功能。

base64.encode(input, output)

编码二进制输入文件的内容,并将生成的base64编码数据写入输出文件。输入输出必须是file objects输入将被读取,直到input.read()返回一个空字节对象。encode()在输出的每76个字节后插入一个换行符(b'\n'),以及确保输出总是以换行符结束每 RFC 2045(MIME)。

base64.encodebytes(s)
base64.encodestring(s)

编码类字节对象s,它可以包含任意二进制数据,并返回base64编码数据的字节,根据RFC 2045 (MIME),在输出的每76个字节之后插入换行符(b'\n'),并确保末尾有一个换行符。

encodestring是已弃用的别名。

模块的示例用法:

>>> 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内容传输编码”提供了base64编码的定义。