本文介紹Python 2.7中的base64模塊,該模塊提供了基於rfc3548的Base16, 32, 64編解碼的接口。官方文檔,參考這里。
該模塊提供兩套接口,傳統接口基於rfc1521的Base64,當前接口基於rfc3548的Base16/32/64編碼規范,本文只介紹當前的接口。
當前接口在Python 2.4中就被引進,關於Base64編碼格式提供了以下六種接口,便於高效靈活地實現需要的編解碼工作。
1. b64encode(s, altchars=None) 2. b64decode(s, altchars=None) 3. standard_b64encode(s) 4. standard_b64decode(s) 5. urlsafe_b64encode(s) 6. urlsafe_b64decode(s)
其中以"*encode"結尾的方法用於將二進制串轉為base64編碼格式的字符串,以“*decode”結尾的方法用於將base64格式的字符串重新轉為二進制串。
我們詳細查看前兩個方法,注意到b64encode()和b64decode()接收同樣形式的參數。其中 s 是要編/解碼的字符串;默認參數altchars的可選值必須是長度至少兩字節的字符串(第二個字符后的內容將被忽略),該方法表示在編/解碼過程中將使用參數altchars中的前兩個字符替換標准Base64字符集中的'+'和'/'。
因此方法3和4中的base64.standard_b64encode(s)和base64.standard_b64decode(s)等價於base64.b64encode(s)和base64.b64decode(s)。而方法5和6中的base64.urlsafe_b64encode(s)和base64.urlsafe_b64decode(s)分別等價於base64.b64encode(s , '-_')和base64.b64decode(s , '-_'),即在編/解碼過程中使用'-'和'_'替代標准Base64字符集中的'+'和'/',生成可以在URL中使用的Base64格式文本。
使用示例:
1 >>> import base64 2 >>> print base64.b64encode('Hello, I am Darren!') 3 SGVsbG8sIEkgYW0gRGFycmVuIQ== 4 >>> 5 >>> print base64.b64decode('SGVsbG8sIEkgYW0gRGFycmVuIQ==') 6 Hello, I am Darren! 7 >>> 8 >>> print base64.b64encode('i\xb7\x1d\xfb\xef\xff') 9 abcd++// 10 >>> 11 >>> print base64.b64encode('i\xb7\x1d\xfb\xef\xff', '-_') 12 abcd--__ 13 >>> 14 >>> print base64.urlsafe_b64encode('i\xb7\x1d\xfb\xef\xff') 15 abcd--__ 16 >>> 17 >>> base64.urlsafe_b64decode('adcd--__') 18 'i\xb7\x1d\xfb\xef\xff'
本模塊還提供了Base32和Base16編解碼接口:
1. b32encode(s)
2. b32decode(s, casefold=False, map01=None)
Base16編解碼:
1. b16encode(s) 2. b16decode(s, casefold=False)
其中參數s都是要編/解碼的字符串,關於Base16/32編碼規范,請參考rfc4648或rfc3548,本文只關注Base64。