base64
--- Base16, Base32, Base64, Base85 數據編碼?
源代碼: Lib/base64.py
此模塊提供了將二進(jìn)制數據編碼為可打印的 ASCII 字符以及將這種編碼格式解碼回二進(jìn)制數據的函數。 它為 RFC 4648 所定義的 Base16, Base32 和 Base64 算法及已成為事實(shí)標準的 Ascii85 和 Base85 編碼格式提供了編碼和解碼函數。
RFC 4648 中的編碼格式適用于編碼二進(jìn)制數據使得它能安全地通過(guò)電子郵件發(fā)送、用作 URL 的一部分,或者包括在 HTTP POST 請求之中。 此編碼格式算法與 uuencode 程序并不相同。
此模塊提供了兩個(gè)接口。 較新的接口支持將 字節類(lèi)對象 編碼為 ASCII bytes
,以及將 字節類(lèi)對象 或包含 ASCII 的字符串解碼為 bytes
。 在 RFC 4648 中定義的幾種 base-64 字母表(普通的以及 URL 和文件系統安全的)都受到支持。
舊的接口不提供從字符串的解碼操作,但提供了操作 文件對象 的編碼和解碼函數。舊接口只支持標準的 Base64 字母表,并且按照 RFC 2045 的規范每 76 個(gè)字符增加一個(gè)換行符。注意:如果你需要支持 RFC 2045,那么使用 email
模塊可能更加合適。
在 3.3 版更改: 新的接口提供的解碼函數現在已經(jīng)支持只包含 ASCII 的 Unicode 字符串。
在 3.4 版更改: 所有 類(lèi)字節對象 現在已經(jīng)被所有編碼和解碼函數接受。添加了對 Ascii85/Base85 的支持。
新的接口提供:
- base64.b64encode(s, altchars=None)?
對 bytes-like object s 進(jìn)行 Base64 編碼,并返回編碼后的
bytes
。可選項 altchars 必須是一個(gè)長(cháng) 2 字節的 bytes-like object,它指定了用于替換
+
和/
的字符。這允許應用程序生成 URL 或文件系統安全的 Base64 字符串。默認值是None
,使用標準 Base64 字母表。
- base64.b64decode(s, altchars=None, validate=False)?
解碼 Base64 編碼過(guò)的 bytes-like object 或 ASCII 字符串 s 并返回解碼過(guò)的
bytes
。可選項 altchars 必須是一個(gè)長(cháng) 2 字節的 bytes-like object,它指定了用于替換
+
和/
的字符。如果 s 被不正確地填寫(xiě),一個(gè)
binascii.Error
錯誤將被拋出。如果 validate 值為
False
(默認情況),則在填充檢查前,將丟棄既不在標準 base-64 字母表之中也不在備用字母表中的字符。如果 validate 為True
,這些非 base64 字符將導致binascii.Error
。For more information about the strict base64 check, see
binascii.a2b_base64()
- base64.standard_b64encode(s)?
編碼 bytes-like object s,使用標準 Base64 字母表并返回編碼過(guò)的
bytes
。
- base64.standard_b64decode(s)?
解碼 bytes-like object 或 ASCII 字符串 s,使用標準 Base64 字母表并返回編碼過(guò)的
bytes
。
- base64.urlsafe_b64encode(s)?
編碼 bytes-like object s,使用 URL 與文件系統安全的字母表,使用
-
以及_
代替標準 Base64 字母表中的+
和/
。返回編碼過(guò)的bytes
。結果中可能包含=
。
- base64.urlsafe_b64decode(s)?
解碼 bytes-like object 或 ASCII 字符串 s,使用 URL 與文件系統安全的字母表,使用
-
以及_
代替標準 Base64 字母表中的+
和/
。返回解碼過(guò)的bytes
- base64.b32encode(s)?
用 Base32 編碼 bytes-like object s 并返回編碼過(guò)的
bytes
- base64.b32decode(s, casefold=False, map01=None)?
解碼 Base32 編碼過(guò)的 bytes-like object 或 ASCII 字符串 s 并返回解碼過(guò)的
bytes
。可選的 casefold 是一個(gè)指定小寫(xiě)字幕是否可接受為輸入的標志。為了安全考慮,默認值為
False
。RFC 4648 允許可以選擇將數碼 0 (zero) 映射為字母 O (oh),并可以選擇將數碼 1 (one) 映射為字母 I (eye) 或字母 L (el)。 可選參數 map01 在不為
None
時(shí),指定數碼 1 應當映射為哪個(gè)字母 (當 map01 不為None
時(shí),數碼 0 總是被映射為字母 O)。 出于安全考慮其默認值為None
,因而在輸入中不允許 0 和 1。如果 s 被錯誤地填寫(xiě)或輸入中存在字母表之外的字符,將拋出
binascii.Error
。
- base64.b32hexencode(s)?
類(lèi)似于
b32encode()
但是使用 Extended Hex Alphabet,如 RFC 4648 所定義。3.10 新版功能.
- base64.b32hexdecode(s, casefold=False)?
類(lèi)似于
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 并返回編碼過(guò)的
bytes
- base64.b16decode(s, casefold=False)?
解碼 Base16 編碼過(guò)的 bytes-like object 或 ASCII 字符串 s 并返回解碼過(guò)的
bytes
。可選的 casefold 是一個(gè)指定小寫(xiě)字幕是否可接受為輸入的標志。為了安全考慮,默認值為
False
。如果 s 被錯誤地填寫(xiě)或輸入中存在字母表之外的字符,將拋出
binascii.Error
。
- base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)?
用 Ascii85 編碼 bytes-like object s 并返回編碼過(guò)的
bytes
foldspaces 是一個(gè)可選的標志,使用特殊的短序列 'y' 代替 'btoa' 提供的 4 個(gè)連續空格 (ASCII 0x20)。這個(gè)特性不被 "標準" Ascii85 編碼支持。
wrapcol 控制了輸出是否包含換行符 (
b'\n'
). 如果該值非零, 則每一行只有該值所限制的字符長(cháng)度.pad 控制在編碼之前輸入是否填充為4的倍數。請注意,
btoa
實(shí)現總是填充。adobe 控制編碼后的字節序列是否要加上
<~
和~>
,這是 Adobe 實(shí)現所使用的。3.4 新版功能.
- base64.a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\x0b')?
解碼 Ascii85 編碼過(guò)的 bytes-like object 或 ASCII 字符串 s 并返回解碼過(guò)的
bytes
。foldspaces 旗標指明是否應接受 'y' 短序列作為 4 個(gè)連續空格 (ASCII 0x20) 的快捷方式。 此特性不被 "標準" Ascii85 編碼格式所支持。
adobe 控制輸入序列是否為 Adobe Ascii85 格式 (即附加 <~ 和 ~>)。
ignorechars 應當是一個(gè) bytes-like object 或 ASCII 字符串,其中包含要從輸入中忽略的字符。 這應當只包含空白字符,并且默認包含 ASCII 中所有的空白字符。
3.4 新版功能.
- base64.b85encode(b, pad=False)?
用 base85(如 git 風(fēng)格的二進(jìn)制 diff 數據所用格式)編碼 bytes-like object b 并返回編碼后的
bytes
。如果 pad 為真值,輸入將以
b'\0'
填充以使其編碼前長(cháng)度為 4 字節的倍數。3.4 新版功能.
- base64.b85decode(b)?
解碼 base85 編碼過(guò)的 bytes-like object 或 ASCII 字符串 b 并返回解碼過(guò)的
bytes
。 如有必要,填充會(huì )被隱式地移除。3.4 新版功能.
舊式接口:
- base64.decode(input, output)?
解碼二進(jìn)制 input 文件的內容并將結果二進(jìn)制數據寫(xiě)入 output 文件。 input 和 output 必須為 文件對象. input 將被讀取直至
input.readline()
返回空字節串對象。
- base64.decodebytes(s)?
解碼 bytes-like object s,該對象必須包含一行或多行 base64 編碼的數據,并返回已解碼的
bytes
。3.1 新版功能.
- base64.encode(input, output)?
編碼二進(jìn)制 input 文件的內容并將經(jīng) base64 編碼的數據寫(xiě)入 output 文件。 input 和 output 必須為 文件對象。 input 將被讀取直到
input.read()
返回空字節串對象。encode()
會(huì )在每輸出 76 個(gè)字節之后插入一個(gè)換行符 (b'\n'
),并會(huì )確保輸出總是以換行符來(lái)結束,如 RFC 2045 (MIME) 所規定的那樣。
- base64.encodebytes(s)?
編碼 bytes-like object s,其中可以包含任意二進(jìn)制數據,并返回包含經(jīng) base64 編碼數據的
bytes
,每輸出 76 個(gè)字節之后將帶一個(gè)換行符 (b'\n'
),并會(huì )確保在末尾也有一個(gè)換行符,如 RFC 2045 (MIME) 所規定的那樣。3.1 新版功能.
此模塊的一個(gè)使用示例:
>>> 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 節);對于要部署到生產(chǎn)環(huán)境的任何代碼都建議充分考慮此安全事項部分。