Skip to main content

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 bytes,以及解码 字节状对象 或包含ASCII到 bytes 的字符串。支持在 RFC 3548 (正常,以及URL和文件系统安全)中定义的base-64字母表。

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

在 3.3 版更改: 现在接口的解码功能现在接受只有ASCII的Unicode字符串。

在 3.4 版更改: 任何 字节状对象 现在被该模块中的所有编码和解码功能接受。 Ascii85/Base85支持添加。

现代接口提供:

base64.b64encode(s, altchars=None)

使用Base64编码 bytes-like object s 并返回编码的 bytes

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

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

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

可选 altchars 必须是至少长度为2的 bytes-like object 或ASCII字符串(忽略其他字符),它指定使用的替代字母表,而不是 +/ 字符。

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

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

base64.standard_b64encode(s)

使用标准的Base64字母表编码 bytes-like object s,并返回编码的 bytes

base64.standard_b64decode(s)

使用标准Base64字母表解码 bytes-like object 或ASCII字符串 s,并返回解码的 bytes

base64.urlsafe_b64encode(s)

使用URL和文件系统安全字母表对 bytes-like object s 进行编码,在标准Base64字母表中用 - 而不是 +_ 代替 /,并返回编码的 bytes。结果仍然可以包含 =

base64.urlsafe_b64decode(s)

使用URL和文件系统安全字母表解码 bytes-like object 或ASCII字符串 s,它替换 - 而不是标准Base64字母表中的 +_ 而不是 /,并返回解码的 bytes

base64.b32encode(s)

使用Base32编码 bytes-like object s 并返回编码的 bytes

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

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

可选 casefold 是指定小写字母表是否可接受为输入的标志。出于安全目的,默认值为 False

RFC 3548 允许将数字0(零)可选地映射到字母O(oh),以及用于将数字1(一)可选地映射到字母I(眼)或字母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

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

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

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

adobe 控制编码字节序列是否用 <~~> 构建,这是Adobe实现使用的。

3.4 新版功能.

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

解码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)

使用base85编码 bytes-like object b (如在git风格的二进制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)

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

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

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

3.1 新版功能.

base64.encode(input, output)

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

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

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

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编码的定义。