base64 --- Base16、Base32、Base64、Base85 資料編碼

原始碼: Lib/base64.py


這個模組提供將二進位資料編碼成可顯示 ASCII 字元以及解碼回原始資料的功能。這包括了 RFC 4648指定的編碼(Base64、Base32 和 Base16)和非標準的 Base85 編碼

該模組提供了兩個介面。新介面支援將類位元組物件 編碼成 ASCII bytes,並將包含 ASCII 的類位元組物件或字串解碼為 bytes。支援 RFC 4648 中定義的兩種 base-64 字母表(常見和 URL 安全 (URL-safe) 及檔案系統安全 (filesystem-safe) 字母表)。

舊版介面不支援從字串解碼,但它提供對檔案物件進行編碼和解碼的函式。它僅支援 Base64 標準字母表,並且按照 RFC 2045 每 76 個字元添加換行字元。請注意,如果你需要 RFC 2045 的支援,你可能會需要 email 函式庫。

在 3.3 版的變更: 新介面的解碼功能現在接受 ASCII-only 的 Unicode 字串。

在 3.4 版的變更: 任何類位元組物件現在被該模組中的所有編碼和解碼函式接受。新增了對 Ascii85/Base85 的支援。

RFC 4648 編碼

RFC 4648 編碼適合對二進位資料進行編碼來使得電子郵件、URL 或是 HTTP POST 內容等傳輸管道能夠安全地傳遞資料。

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 填充 (pad) 不正確,將引發 binascii.Error 例外。

如果 validateFalse(預設值),在 padding check(填充檢查)之前,不屬於標準 base-64 字母表和替代字母表的字元將被丟棄。如果 validateTrue,輸入中的這些非字母表字元將導致引發 binascii.Error

有關嚴格的 base64 檢查的更多資訊,請參閱 binascii.a2b_base64()

如果 altchars 的長度不是 2,可能會斷言或引發 ValueError

base64.standard_b64encode(s)

使用標準 Base64 字母表對類位元組物件 s 進行編碼,並回傳編碼後的 bytes

base64.standard_b64decode(s)

使用標準 Base64 字母表對類位元組物件或 ASCII 字串 s 進行解碼,並回傳解碼後的 bytes

base64.urlsafe_b64encode(s)

使用 URL 安全和檔案系統安全的字母表對類位元組物件 s 進行編碼,該字母表將標準 Base64 字母表中的 + 替換為 -/ 替換為 _,並回傳編碼後的 bytes。結果仍可能包含 =

base64.urlsafe_b64decode(s)

使用 URL 安全和檔案系統安全字母表對類位元組物件或 ASCII 字串 s 進行解碼,該字母表將標準 Base64 字母表中的 + 替換為 -/ 替換為 _,並回傳解碼後的 bytes

base64.b32encode(s)

使用 Base32 對類位元組物件 s 進行編碼,並回傳編碼後的 bytes

base64.b32decode(s, casefold=False, map01=None)

解碼經過 Base32 編碼的類位元組物件或 ASCII 字串 s,並回傳解碼後的 bytes

可選的 casefold 是一個是否接受小寫字母表作為輸入的旗標。出於安全性考量,預設值為 False

RFC 4648 允許將數字 0 選擇性地對應對映為字母 O,並且允許將數字 1 選擇性地對映為字母 I 或字母 L。當可選的引數 map01 不為 None 時,指定數字 1 應該對映為哪個字母(當 map01 不為 None 時,數字 0 總是對映為字母 O)。出於安全性考量,預設值為 None,因此不允許在輸入中使用數字 0 和 1。

如果 s 的填充不正確或輸入中存在非字母表字元,將引發 binascii.Error

base64.b32hexencode(s)

類似於 b32encode(),但使用在 RFC 4648 中定義的擴展十六進位字母表 (Extended Hex Alphabet)。

在 3.10 版被加入.

base64.b32hexdecode(s, casefold=False)

類似於 b32decode(),但使用在 RFC 4648 中定義的擴展十六進位字母表。

這個版本不允許將數字 0 對映為字母 O ,以及將數字 1 對映為字母 I 或字母 L,所有這些字元都包含在擴展十六進位字母表中,並且不能互換使用。

在 3.10 版被加入.

base64.b16encode(s)

使用 Base16 對類位元組物件 s 進行編碼,並回傳編碼後的