base64 — Base16,Base32,Base64,Base85 数据编码

源代码: Lib/base64.py


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

RFC 3548编码适合对二进制数据进行编码,以便可以安全地pass电子邮件发送,用作 URL 的一部分或包含在 HTTP POST 请求中。编码算法与 uuencode 程序不同。

此模块提供两个接口。现代接口支持将bytes-like objects编码为 ASCII bytes,并解码bytes-like objects或将包含 ASCII 的字符串解码为bytes。支持在 RFC 3548中定义的两种 base-64 字母(正常,URL 和文件系统安全)。

旧版接口不支持从字符串解码,但确实提供了用于与file objects进行编码和解码的Function。它仅支持 Base64 标准字母,并且按照 RFC 2045每 76 个字符添加换行符。请注意,如果您正在寻找 RFC 2045支持,则可能希望查看email软件包。

在版本 3.3 中进行了更改:现代接口的解码Function现在可以接受纯 ASCII Unicode 字符串。

在版本 3.4 中更改:此模块中的所有编码和解码Function现在都接受任何bytes-like objects。添加了 Ascii85/Base85 支持。

现代界面提供:

  • base64. b64encode(* s altchars = None *)

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

  • base64. b64decode(* s altchars = None validate = False *)

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

如果错误地填充* s *,则会引发binascii.Error异常。

如果* validate False(默认值),则在填充检查之前将丢弃既不在正常的 base-64 字母中也不在替代字母中的字符。如果 validate *是True,则 Importing 中的这些非字母字符将产生binascii.Error

  • base64. standard_b64encode(* s *)

  • 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 *)

  • base64. b32decode(* s casefold = False map01 = None *)

可选的* casefold *是一个标志,指定是否可以接受小写字母作为 Importing。为了安全起见,默认值为False

RFC 3548允许将数字 0(零)Map 到字母 O(哦),并允许将数字 1(一个)Map 到字母 I(眼睛)或字母 L(el)。可选参数* map01 如果不是None,则指定数字 1 应该 Map 到哪个字母(当 map01 *不是None时,数字 0 总是 Map 到字母 O)。为了安全起见,默认值为None,因此 Importing 中不允许使用 0 和 1.

如果错误地填充* s *或 Importing 中存在非字母字符,则引发binascii.Error

  • base64. b16encode(* s *)

  • base64. b16decode(* s casefold = False *)

可选的* casefold *是一个标志,指定是否可以接受小写字母作为 Importing。为了安全起见,默认值为False

如果错误地填充* s *或 Importing 中存在非字母字符,则引发binascii.Error

  • base64. a85encode(* b **,* foldspaces = False wrapcol = 0 pad = False adobe = False *)
  • foldspaces *是一个可选标志,它使用特殊的短序列'y'代替'btoa'支持的 4 个连续空格(ASCII 0x20)。 “标准” Ascii85 编码不支持此Function。

  • wrapcol *控制是否在输出中添加换行符(b'\n')。如果它不为零,则每条输出行最多只能有这么多字符长。

  • pad *控制在编码之前是否将 Importing 填充为 4 的倍数。请注意,btoa实现始终填充。

  • adobe *控制是否使用<~~>来对编码的字节序列进行构图,这是 Adobe 实现所使用的。

3.4 版的新Function。

  • base64. a85decode(* b **,* foldspaces = False adobe = False ignorechars = b' tnrv'*)
  • foldspaces *是一个标志,用于指定是否应将'y'短序列作为 4 个连续空格(ASCII 0x20)的缩写。 “标准” Ascii85 编码不支持此Function。

  • adobe *控制 Importing 序列是否为 Adobe Ascii85 格式(即以<~ and ~>表示)。

  • ignorechars *应该是bytes-like object或 ASCII 字符串,其中包含要从 Importing 中忽略的字符。它只能包含空格字符,并且默认情况下包含所有 ASCII 空格字符。

3.4 版的新Function。

  • base64. b85encode(* b pad = False *)
    • 使用 base85 编码bytes-like object * b *(例如 git 样式的二进制差异),并返回编码的bytes

如果* pad *为 true,则 Importing 将填充b'\0',因此其长度是编码前 4 字节的倍数。

3.4 版的新Function。

  • base64. b85decode(* b *)
    • 解码 base85 编码的bytes-like object或 ASCII 字符串* b *并返回解码的bytes。如有必要,隐式删除填充。

3.4 版的新Function。

旧版界面:

  • base64. decode(* input output *)

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

    • 解码bytes-like object * s *,它必须包含一或多行 base64 编码的数据,然后返回解码的bytes

3.1 版中的新Function。

从 3.1 版开始不推荐使用。

  • base64. encode(* input output *)

    • 对二进制 Importing 文件的内容进行编码,并将生成的 base64 编码数据写入输出文件。 * input output *必须为file objects。 * input *将被读取,直到input.read()返回一个空字节对象为止。 encode()在输出的每 76 个字节之后插入一个换行符(b'\n'),并按照 RFC 2045(MIME)确保输出始终以换行符结尾。
  • base64. encodebytes(* s *)

    • 对可以包含任意二进制数据的bytes-like object * s *进行编码,然后返回包含 base64 编码数据的bytes,并在每输出 76 个字节后插入换行符(b'\n'),并确保按照 RFC 2045尾随换行符(哑剧)。

3.1 版中的新Function。

从 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'

See also

  • Module binascii

  • 支持模块,包含 ASCII 到二进制和二进制到 ASCII 转换。

  • RFC 1521-MIME(多用途 Internet 邮件扩展),第 1 部分:指定和描述 Internet 邮件正文格式的机制

  • 第 5.2 节“ Base64 Content-Transfer-Encoding”提供了 base64 编码的定义。