base64 --- Base16, Base32, Base64, Base85 數(shù)據(jù)編碼?

源代碼: Lib/base64.py


此模塊提供了將二進制數(shù)據(jù)編碼為可打印的 ASCII 字符以及將這種編碼格式解碼回二進制數(shù)據(jù)的函數(shù)。 它為 RFC 4648 所定義的 Base16, Base32 和 Base64 算法及已成為事實標準的 Ascii85 和 Base85 編碼格式提供了編碼和解碼函數(shù)。

RFC 4648 中的編碼格式適用于編碼二進制數(shù)據(jù)使得它能安全地通過電子郵件發(fā)送、用作 URL 的一部分,或者包括在 HTTP POST 請求之中。 此編碼格式算法與 uuencode 程序并不相同。

此模塊提供了兩個接口。 較新的接口支持將 字節(jié)類對象 編碼為 ASCII bytes,以及將 字節(jié)類對象 或包含 ASCII 的字符串解碼為 bytes。 在 RFC 4648 中定義的幾種 base-64 字母表(普通的以及 URL 和文件系統(tǒng)安全的)都受到支持。

舊的接口不提供從字符串的解碼操作,但提供了操作 文件對象 的編碼和解碼函數(shù)。舊接口只支持標準的 Base64 字母表,并且按照 RFC 2045 的規(guī)范每 76 個字符增加一個換行符。注意:如果你需要支持 RFC 2045,那么使用 email 模塊可能更加合適。

在 3.3 版更改: 新的接口提供的解碼函數(shù)現(xiàn)在已經(jīng)支持只包含 ASCII 的 Unicode 字符串。

在 3.4 版更改: 所有 類字節(jié)對象 現(xiàn)在已經(jīng)被所有編碼和解碼函數(shù)接受。添加了對 Ascii85/Base85 的支持。

新的接口提供:

base64.b64encode(s, altchars=None)?

bytes-like object s 進行 Base64 編碼,并返回編碼后的 bytes。

可選項 altchars 必須是一個長 2 字節(jié)的 bytes-like object,它指定了用于替換 +/ 的字符。這允許應(yīng)用程序生成 URL 或文件系統(tǒng)安全的 Base64 字符串。默認值是 None,使用標準 Base64 字母表。

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

解碼 Base64 編碼過的 bytes-like object 或 ASCII 字符串 s 并返回解碼過的 bytes。

可選項 altchars 必須是一個長 2 字節(jié)的 bytes-like object,它指定了用于替換 +/ 的字符。

如果 s 被不正確地填寫,一個 binascii.Error 錯誤將被拋出。

如果 validate 值為 False (默認情況),則在填充檢查前,將丟棄既不在標準 base-64 字母表之中也不在備用字母表中的字符。如果 validateTrue,這些非 base64 字符將導(dǎo)致 binascii.Error

For more information about the strict base64 check, see binascii.a2b_base64()

base64.standard_b64encode(s)?

編碼 bytes-like object s,使用標準 Base64 字母表并返回編碼過的 bytes。

base64.standard_b64decode(s)?

解碼 bytes-like object 或 ASCII 字符串 s,使用標準 Base64 字母表并返回編碼過的 bytes。

base64.urlsafe_b64encode(s)?

編碼 bytes-like object s,使用 URL 與文件系統(tǒng)安全的字母表,使用 - 以及 _ 代替標準 Base64 字母表中的 +/。返回編碼過的 bytes。結(jié)果中可能包含 =

base64.urlsafe_b64decode(s)?

解碼 bytes-like object 或 ASCII 字符串 s,使用 URL 與文件系統(tǒng)安全的字母表,使用 - 以及 _ 代替標準 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 4648 允許可以選擇將數(shù)碼 0 (zero) 映射為字母 O (oh),并可以選擇將數(shù)碼 1 (one) 映射為字母 I (eye) 或字母 L (el)。 可選參數(shù) map01 在不為 None 時,指定數(shù)碼 1 應(yīng)當映射為哪個字母 (當 map01 不為 None 時,數(shù)碼 0 總是被映射為字母 O)。 出于安全考慮其默認值為 None,因而在輸入中不允許 0 和 1。

如果 s 被錯誤地填寫或輸入中存在字母表之外的字符,將拋出 binascii.Error。

base64.b32hexencode(s)?

類似于 b32encode() 但是使用 Extended Hex Alphabet,如 RFC 4648 所定義。

3.10 新版功能.

base64.b32hexdecode(s, casefold=False)?

類似于 b32decode() 但是使用 Extended Hex Alphabet,如 RFC 4648 所定義。

This version does not allow the digit 0 (zero) to the letter O (oh) and digit 1 (one) to either the letter I (eye) or letter L (el) mappings, all these characters are included in the Extended Hex Alphabet and are not interchangeable.

3.10 新版功能.

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 s 并返回編碼過的 bytes

foldspaces 是一個可選的標志,使用特殊的短序列 'y' 代替 'btoa' 提供的 4 個連續(xù)空格 (ASCII 0x20)。這個特性不被 "標準" Ascii85 編碼支持。

wrapcol 控制了輸出是否包含換行符 (b'\n'). 如果該值非零, 則每一行只有該值所限制的字符長度.

pad 控制在編碼之前輸入是否填充為4的倍數(shù)。請注意,btoa 實現(xiàn)總是填充。

adobe 控制編碼后的字節(jié)序列是否要加上 <~~>,這是 Adobe 實現(xiàn)所使用的。

3.4 新版功能.

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

解碼 Ascii85 編碼過的 bytes-like object 或 ASCII 字符串 s 并返回解碼過的 bytes

foldspaces 旗標指明是否應(yīng)接受 'y' 短序列作為 4 個連續(xù)空格 (ASCII 0x20) 的快捷方式。 此特性不被 "標準" Ascii85 編碼格式所支持。

adobe 控制輸入序列是否為 Adobe Ascii85 格式 (即附加 <~ 和 ~>)。

ignorechars 應(yīng)當是一個 bytes-like object 或 ASCII 字符串,其中包含要從輸入中忽略的字符。 這應(yīng)當只包含空白字符,并且默認包含 ASCII 中所有的空白字符。

3.4 新版功能.

base64.b85encode(b, pad=False)?

用 base85(如 git 風(fēng)格的二進制 diff 數(shù)據(jù)所用格式)編碼 bytes-like object b 并返回編碼后的 bytes。

如果 pad 為真值,輸入將以 b'\0' 填充以使其編碼前長度為 4 字節(jié)的倍數(shù)。

3.4 新版功能.

base64.b85decode(b)?

解碼 base85 編碼過的 bytes-like object 或 ASCII 字符串 b 并返回解碼過的 bytes。 如有必要,填充會被隱式地移除。

3.4 新版功能.

舊式接口:

base64.decode(input, output)?

解碼二進制 input 文件的內(nèi)容并將結(jié)果二進制數(shù)據(jù)寫入 output 文件。 inputoutput 必須為 文件對象. input 將被讀取直至 input.readline() 返回空字節(jié)串對象。

base64.decodebytes(s)?

解碼 bytes-like object s,該對象必須包含一行或多行 base64 編碼的數(shù)據(jù),并返回已解碼的 bytes。

3.1 新版功能.

base64.encode(input, output)?

編碼二進制 input 文件的內(nèi)容并將經(jīng) base64 編碼的數(shù)據(jù)寫入 output 文件。 inputoutput 必須為 文件對象。 input 將被讀取直到 input.read() 返回空字節(jié)串對象。 encode() 會在每輸出 76 個字節(jié)之后插入一個換行符 (b'\n'),并會確保輸出總是以換行符來結(jié)束,如 RFC 2045 (MIME) 所規(guī)定的那樣。

base64.encodebytes(s)?

編碼 bytes-like object s,其中可以包含任意二進制數(shù)據(jù),并返回包含經(jīng) base64 編碼數(shù)據(jù)的 bytes,每輸出 76 個字節(jié)之后將帶一個換行符 (b'\n'),并會確保在末尾也有一個換行符,如 RFC 2045 (MIME) 所規(guī)定的那樣。

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 節(jié));對于要部署到生產(chǎn)環(huán)境的任何代碼都建議充分考慮此安全事項部分。

參見

模塊 binascii

支持模塊,包含ASCII到二進制和二進制到ASCII轉(zhuǎn)換。

RFC 1521 - MIME (Multipurpose Internet Mail Extensions) 第一部分:規(guī)定并描述因特網(wǎng)消息體的格式的機制。

第 5.2 節(jié),“Base64 內(nèi)容轉(zhuǎn)換編碼格式” 提供了 base64 編碼格式的定義。