您現在的位置是:首頁 > 手機遊戲首頁手機遊戲

Python之Base64加解密

簡介3、base64轉換過程如下圖所示:Python標準庫中提供了base64模組,用來進行轉換,因使用到以下二組方法,故做如下說明:base64.b64encode()將bytes型別資料進行base64編碼,返回編碼後的bytes型別bas

解碼模組上的字母代表什麼意思

1、什麼是Base64

Base64是一種基於64個可列印字元來表示二進位制資料的表示方法。由於2^6=64,所以每6個位元為一個單元,對應某個可列印字元。

3個位元組有24個位元,對應於4個Base64單元,即3個位元組可由4個可列印字元來表示。在Base64中的可列印字元包括字母A-Z、a-z、數字0-9,這樣共有62個字元,此外兩個可列印符號在不同的系統中而不同。

Base64模組真正用得上的方法只有8個,分別是:

encode, decode, encodestring, decodestring, b64encode, b64decode, urlsafe_b64decode, urlsafe_b64encode。

它們8個可以兩兩分為4組:

encode,decode一組,專門用來編碼和解碼檔案的, 也可以對StringIO裡的資料做編解碼;

encodestring,decodestring一組,專門用來編碼和解碼字串;

b64encode,b64decode一組,用來編碼和解碼字串,並且有一個替換符號字元的功能。

這個功能是這樣的:因為Base64編碼後的字元除了英文字母和數字外還有三個字元‘ + / =’,其中‘=’只是為了補全編碼後的字元數為4的整數,而‘+’和‘/’在一些情況下需要被替換的,b64encode和b64decode正是提供了這樣的功能。至於什麼情況下‘+’和‘/’需要被替換,最常見的就是對url進行Base64編碼的時候。

urlsafe_b64encode,urlsafe_b64decode 一組,這個就是用來專門對url進行Base64編解碼的,實際上也是呼叫的前一組函式。

2、Base64有什麼使用場景

Base64是一種任意二進位制到文字字串的編碼方法,常用於在URL、Cookie、網頁中傳輸少量二進位制資料,包括MIME的電子郵件及XML的一些複雜資料。

3、base64轉換過程

如下圖所示:

Python之Base64加解密

Python標準庫中提供了base64模組,用來進行轉換,因使用到以下二組方法,故做如下說明:

base64.b64encode()將bytes型別資料進行base64編碼,返回編碼後的bytes型別

base64.b64deocde()將base64編碼的bytes型別進行解碼,返回解碼後的bytes型別

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

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

4、工作中遇到的問題

使用curl 命令可以正常地返回,如下:

tony@l-l-server1。beta。op。tx1 ~ $ curl “http://10。7。37。9:9200/entity-prod-ars_ars-profile/_count?pretty” -u‘ars_es_rw:LohZUiU9CIqh1oe4VP’{“count” : 61475690,“_shards” : {“total” : 5,“successful” : 5,“skipped” : 0,“failed” : 0}}

轉換為Python的request請求時一直失敗。如下圖所示:

Python之Base64加解密

正確的處理應該是這樣的:

def get_es_token(): username=“ars_es_rw” password=“LohZUiU9CIqh1oe4VP” token=base64。b64encode(“{}:{}”。format(username, password)。encode()) headers = {‘content-type’: ‘application/json’,“Authorization”:“Basic ” + bytes。decode(token)} print(headers) url=“http://10。7。37。9:9200/entity-prod-ars_ars-profile/_count?pretty” response = requests。request(“POST”, url, headers=headers) print(response。text)

備註:上面截圖失敗與下面成功的原因在於要使用bytes。decode方法將token bytes型別轉換為str。 或寫成:str(token,encoding=’utf8’)都可以。

簡單解釋下bytes是什麼:

bytes 只負責以位元組序列的形式(二進位制形式)來儲存資料,至於這些資料到底表示什麼內容(字串、數字、圖片、音訊等),完全由程式的解析方式決定。如果採用合適的字元編碼方式(字符集),位元組串可以恢復成字串;反之亦然,字串也可以轉換成位元組串。

以下是網上查的示例:

# bytes objectb = b“example”# str objects = “example”# str to bytessb = bytes(s, encoding = “utf8”)# bytes to strbs = str(b, encoding = “utf8”)# an alternative method# str to bytessb2 = str。encode(s)# bytes to strbs2 = bytes。decode(b)

5、小技巧

可以看一下在Linux下的加密與解密字串:

tony@l-l-server1。beta。op。tx1 ~ $ echo “ars_es_rw:LohZUiU9CIqh1oe4VP” | base64 YXJzX2VzX3J3OkxvaFpVaVU5Q0lxaDFvZTRWUAo= tony@l-l-server1。beta。op。tx1 ~ $ echo “YXJzX2VzX3J3OkxvaFpVaVU5Q0lxaDFvZTRWUA==” | base64 -dars_es_rw:LohZUiU9CIqh1oe4VP

Top