首頁  >  文章  >  後端開發  >  Python中base64加密解密操作方法及版本間差異

Python中base64加密解密操作方法及版本間差異

巴扎黑
巴扎黑原創
2017-08-16 13:45:391779瀏覽

今天來看看base64加密函數的使用,以及Python2與Python3中的不同。

一、base64

Base64是一種基於64個可列印字元來表示二進位資料的表示方法。由於2的6次方等於64,所以每6個位元為一個單元,對應某個可列印字元。三個位元組有24個比特,對應4個Base64單元,即3個位元組需要用4個可列印字元來表示。它可用於作為電子郵件的傳輸編碼。在Base64中的可列印字符包括字母A-Z、a-z、數字0-9 ,這樣共有62個字符,此外兩個可列印符號在不同的系統中而不同。編碼後的資料比原始資料略長,為原來的4/3。

Base64常用於在通常處理文字資料的場合,表示、傳輸、儲存一些二進位資料(或不可列印的字串)。包括MIME的email,email via MIME, 在XML中儲存複雜資料.

在郵件中的用途:

在MIME格式的電子郵件中,base64可以用來將binary的字節序列資料編碼成ASCII字元序列構成的文字。使用時,在傳輸編碼方式中指定base64。使用的字符包括大小寫字母各26個,加上10個數字,和加號“+”,斜杠“/”,一共64個字符,等號“=”用來作為後綴用途。

在URL中的用途:

標準的Base64並不適合直接放在URL裡傳輸,因為URL編碼器會把標準Base64中的「/」和「+」字元變為形如「%XX」的形式,而這些「%」號在存入資料庫時還需要再進行轉換,因為ANSI SQL中已將「%」號用作通配符。

為解決此問題,可採用一種用於URL的改進Base64編碼,它不在末尾填充'='號,並將標準Base64中的“+”和“/”分別改成了“ *”和“-”,這樣就免去了在URL編解碼和資料庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,並統一了數據庫、表單等處對象標識符的格式。

另有一種用於正則表達式的改進Base64變種,它將“+”和“/”改成了“!”和“-”,因為“+”,“*”在正則表達式中都可能具有特殊意義。

二、python中使用

Python2 和Python3 在base64處理上是不同的,Python3下傳入的參數不能是Unicode字串,需要轉換

Python2 :

Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> str = 'pythontab.com'
>>> base64.b64encode(str)
'cHl0aG9udGFiLmNvbQ=='
>>> base64.b64decode('cHl0aG9udGFiLmNvbQ==')
'pythontab.com'
>>>

Python3:

Python 3.5.2 (default, Aug 24 2016, 16:48:29) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> str = 'pythontab.com'
>>> bytesStr = str.encode(encoding='utf-8')
>>> bytesStr.decode()
'pythontab.com'
>>> b64str = base64.b64encode(bytesStr)
>>> b64str
b'cHl0aG9udGFiLmNvbQ=='
>>> base64.b64decode(b64str)
b'pythontab.com'
>>>

注意:

首先要搞清楚,字串在Python內部的表示是unicode編碼. 

因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。 

decode的作用是將其他編碼的字串轉換成unicode編碼, 

如str1.decode('gb2312'),表示將gb2312編碼的字串轉換成unicode編碼。 

encode的作用是將unicode編碼轉換成其他編碼的字串, 

如str2.encode('gb2312'),表示將unicode編碼的字串轉換成gb2312編碼。

三、其他的方法

base64.b64encode(s[, altchars])

base64.b64decode(s[, altchars])

#altchars為可選的參數,用來替換+和/的一個兩個長度的字串。

base64.urlsafe_b64encode(s)

base64.urlsafe_b64decode(s)

此方法中用-取代了+,用_取代了/ ,這樣可以保證編碼後的字串放在url裡可以正常存取

base64.b32encode(s)

base64.b32decode(s[, casefold[, map01]])

base64. b16encode(s)

base64.b16decode(s[, casefold])

以上是Python中base64加密解密操作方法及版本間差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn