base64
— Base16、Base32、Base64、Base85 資料編碼¶
原始碼: Lib/base64.py
此模組提供了將二進位制資料編碼為可列印的 ASCII 字元以及將此類編碼解碼回二進位制資料的功能。它為 RFC 4648 中指定的編碼提供了編碼和解碼功能,該 RFC 定義了 Base16、Base32 和 Base64 演算法,以及事實上的標準 Ascii85 和 Base85 編碼。
RFC 4648 編碼適用於對二進位制資料進行編碼,以便可以透過電子郵件安全傳送、用作 URL 的一部分或包含在 HTTP POST 請求中。編碼演算法與 uuencode 程式不同。
此模組提供了兩個介面。現代介面支援將 類位元組物件 編碼為 ASCII bytes
,以及將包含 ASCII 的 類位元組物件 或字串解碼為 bytes
。支援 RFC 4648 中定義的兩個 base-64 字母表(標準字母表以及 URL 和檔案系統安全字母表)。
舊介面不支援從字串解碼,但它提供了用於編碼和解碼到 檔案物件 的功能。它僅支援 Base64 標準字母表,並且根據 RFC 2045 每 76 個字元新增換行符。請注意,如果您正在尋找 RFC 2045 支援,您可能需要檢視 email
包。
在 3.3 版本中更改:現代介面的解碼函式現在接受僅包含 ASCII 的 Unicode 字串。
在 3.4 版本中更改:此模組中的所有編碼和解碼函式現在都接受任何 類位元組物件。添加了 Ascii85/Base85 支援。
現代介面提供
- base64.b64encode(s, altchars=None)¶
使用 Base64 對 類位元組物件 s 進行編碼,並返回編碼後的
bytes
。可選的 altchars 必須是一個長度為 2 的 類位元組物件,它指定了
+
和/
字元的替代字母表。這允許應用程式(例如)生成 URL 或檔案系統安全的 Base64 字串。預設值為None
,對於該值,將使用標準的 Base64 字母表。如果 altchars 的長度不是 2,則可能會斷言或引發
ValueError
。如果 altchars 不是 類位元組物件,則會引發TypeError
。
- base64.b64decode(s, altchars=None, validate=False)¶
解碼 Base64 編碼的 類位元組物件 或 ASCII 字串 s,並返回解碼後的
bytes
。可選的 altchars 必須是一個長度為 2 的 類位元組物件 或 ASCII 字串,它指定了代替
+
和/
字元使用的替代字母表。如果 s 的填充不正確,則會引發
binascii.Error
異常。如果 validate 為
False
(預設值),則會在填充檢查之前丟棄既不在普通 base-64 字母表中也不在替代字母表中的字元。如果 validate 為True
,則輸入中的這些非字母表字元會導致binascii.Error
。有關嚴格的 base64 檢查的更多資訊,請參閱
binascii.a2b_base64()
如果 altchars 的長度不是 2,則可能會斷言或引發
ValueError
。
- base64.urlsafe_b64encode(s)¶
使用 URL 和檔案系統安全的字母表對 類位元組物件 s 進行編碼,該字母表在標準 Base64 字母表中將
+
替換為-
,將/
替換為_
,並返回編碼後的bytes
。結果仍然可以包含=
。
- base64.urlsafe_b64decode(s)¶
使用 URL 和檔案系統安全的字母表解碼 類位元組物件 或 ASCII 字串 s,該字母表在標準 Base64 字母表中將
+
替換為-
,將/
替換為_
,並返回解碼後的bytes
。
- base64.b32decode(s, casefold=False, map01=None)¶
解碼 Base32 編碼的類位元組物件或 ASCII 字串 s,並返回解碼後的
bytes
。可選引數 casefold 是一個標誌,用於指定是否接受小寫字母作為輸入。出於安全考慮,預設值為
False
。RFC 4648 允許可選地將數字 0(零)對映到字母 O (oh),以及可選地將數字 1(一)對映到字母 I(eye)或字母 L(el)。當 map01 不是
None
時,可選引數 map01 指定數字 1 應對映到哪個字母(當 map01 不是None
時,數字 0 始終對映到字母 O)。出於安全考慮,預設值為None
,因此不允許輸入 0 和 1。如果 s 填充不正確或輸入中存在非字母字元,則會引發
binascii.Error
。
- base64.b32hexencode(s)¶
與
b32encode()
類似,但使用 RFC 4648 中定義的擴充套件十六進位制字母表。在 3.10 版本中新增。
- base64.b32hexdecode(s, casefold=False)¶
與
b32decode()
類似,但使用 RFC 4648 中定義的擴充套件十六進位制字母表。此版本不允許將數字 0(零)對映到字母 O (oh),也不允許將數字 1(一)對映到字母 I(eye)或字母 L(el),所有這些字元都包含在擴充套件十六進位制字母表中,並且不可互換。
在 3.10 版本中新增。
- base64.b16decode(s, casefold=False)¶
解碼 Base16 編碼的類位元組物件或 ASCII 字串 s,並返回解碼後的
bytes
。可選引數 casefold 是一個標誌,用於指定是否接受小寫字母作為輸入。出於安全考慮,預設值為
False
。如果 s 填充不正確或輸入中存在非字母字元,則會引發
binascii.Error
。
- base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)¶
使用 Ascii85 編碼類位元組物件 b,並返回編碼後的
bytes
。foldspaces 是一個可選標誌,它使用特殊的短序列 'y' 代替 4 個連續的空格(ASCII 0x20),如 'btoa' 支援的那樣。 “標準”Ascii85 編碼不支援此功能。
wrapcol 控制輸出是否應新增換行符 (
b'\n'
)。如果此值為非零值,則每個輸出行的長度最多為此值,不包括尾部的換行符。pad 控制輸入是否在編碼前填充到 4 的倍數。請注意,
btoa
實現始終會進行填充。adobe 控制編碼的位元組序列是否用
<~
和~>
括起來,這是 Adobe 實現所使用的。在 3.4 版本中新增。
- base64.a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\x0b')¶
解碼 Ascii85 編碼的類位元組物件或 ASCII 字串 b,並返回解碼後的
bytes
。foldspaces 是一個標誌,用於指定是否應將 'y' 短序列接受為 4 個連續空格(ASCII 0x20)的簡寫形式。 “標準”Ascii85 編碼不支援此功能。
adobe 控制輸入序列是否為 Adobe Ascii85 格式(即,是否用 <~ 和 ~> 括起來)。
ignorechars 應該是一個類位元組物件或 ASCII 字串,其中包含要從輸入中忽略的字元。 這應該只包含空白字元,預設情況下包含 ASCII 中的所有空白字元。
在 3.4 版本中新增。
- base64.b85encode(b, pad=False)¶
使用 base85(例如,在 git 風格的二進位制差異中使用)編碼類位元組物件 b,並返回編碼後的
bytes
。如果 pad 為 true,則輸入將填充
b'\0'
,使其長度在編碼前為 4 個位元組的倍數。在 3.4 版本中新增。
- base64.z85encode(s)¶
使用 Z85(如 ZeroMQ 中使用的)編碼類位元組物件 s,並返回編碼後的
bytes
。 有關更多資訊,請參閱 Z85 規範。在 3.13 版本中新增。
遺留介面
- base64.decode(input, output)¶
解碼二進位制 input 檔案的內容,並將生成的二進位制資料寫入 output 檔案。 input 和 output 必須是檔案物件。 將讀取 input 直到
input.readline()
返回一個空的位元組物件。
- base64.encode(input, output)¶
對二進位制 input 檔案的內容進行編碼,並將生成的 base64 編碼資料寫入 output 檔案。input 和 output 必須是 檔案物件。input 將被讀取,直到
input.read()
返回一個空的 bytes 物件。encode()
會在輸出的每 76 個位元組後插入一個換行符 (b'\n'
),並確保輸出始終以換行符結尾,這符合 RFC 2045 (MIME)。
- base64.encodebytes(s)¶
對 類位元組物件 s 進行編碼,它可以包含任意二進位制資料,並返回
bytes
,其中包含 base64 編碼的資料,並在每 76 個輸出位元組後插入換行符 (b'\n'
),並確保末尾有一個換行符,這符合 RFC 2045 (MIME)。在 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 節) 中添加了一個新的安全注意事項部分;建議審查安全部分,以瞭解任何部署到生產環境的程式碼。