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