Python學習筆記 12 3章 base64

2021-08-28 08:17:57 字數 2283 閱讀 2082

base64是一種用64個字元來表示任意二進位制資料的方法。

base64

是一種最常見的二進位制編碼方法,用作二進位製到字串的轉換

1、base64的原理

1)準備乙個包含64個字元的陣列:

['a', 'b', 'c', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

2)對二進位制資料進行處理,每3個位元組一組,一共是3x8=24bit,劃為4組,每組正好6個bit:

這樣我們得到4個數字作為索引,然後查表,獲得相應的4個字元,就是編碼後的字串。

base64編碼把3位元組的二進位制資料編碼為4位元組的文字資料

後,雖然長度增加

33%,但好處是編碼後的文字資料可以在郵件正文、網頁等直接顯示。

如果要編碼的二進位制資料不是

3的倍數,最後會剩下1個或

2個位元組。

base64

會用\x00

位元組在末尾補足後,再在編碼的末尾加上1個或

2個=號,表示補了多少位元組,解碼的時候,會自動去掉。 2、

base64

應用 1)python內建的

base64

可以直接進行base64的編譯碼

>>> import base64

>>>

base64.b64

encode

(b'binary\x00string')#編碼

b'ymluyxj5ahn0cmluzw=='

>>>

base64.b64

decode

(b'ymluyxj5ahn0cmluzw==')#解碼

b'binary\x00string'

2)"url safe"的base64編碼

由於標準的base64編碼後可能出現字元+和/,在url中就不能直接作為引數,所以又有一種"url safe"的base64編碼,其實就是把字元+和/分別變成-和_:

>>> base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')

b'abcd++//'

>>>base64.

urlsafe_

b64encode

(b'i\xb7\x1d\xfb\xef\xff')

b'abcd--__'

>>> base64.

urlsafe_

b64decode

('abcd--__')

b'i\xb7\x1d\xfb\xef\xff'

3、小結

1)可以自己定義64個字元的排列順序,這樣就可以自定義base64編碼,不過,通常情況下完全沒有必要。

2)base64是一種通過查表的編碼方法,不能用於加密,即使使用自定義的編碼表也不行

3)base64適用於小段內容的編碼,比如數字證書簽名、cookie的內容等。

4)由於=字元也可能出現在base64編碼中,但=用在url、cookie裡面會造成歧義,所以,很多base64編碼後會把=去掉。解碼時會自動加上

# 標準base64:

'abcd' -> 'ywjjza=='

# 自動去掉=:

'abcd' -> 'ywjjza'

base64

是一種任意二進位製到文字字串的編碼方法

,常用於在

url、

cookie

、網頁中傳輸少量二進位制資料。 4

、例子 1

、請寫乙個能處理去掉

=的base64解碼函式:

# -*- coding: utf-8 -*-

import base64

def safe_base64_decode(s):

s += b'==='

#為資料加上三個

= return base64.b64decode(s[:-1*(len(s)%4)])

#s[:-1*(len(s)%4)]

不顯示最後幾個元素

# 測試:

assert b'abcd' == safe_base64_decode(b'ywjjza=='), safe_base64_decode('ywjjza==')

assert b'abcd' == safe_base64_decode(b'ywjjza'), safe_base64_decode('ywjjza')

print('ok')

Python程式設計快速上手第 1,2,3 章

第1章python 基礎 python 3.3 2 v3.3.2 d047928ae3f6,may 16 2013,00 06 53 msc v.1600 64 bit amd64 on win32 credits or license for more information.2 24 int 4...

12 3日周二學習筆記

1.在看imputation的樣例 測試損失是怎麼得出來的呢?將x輸入進模型,並且 出了x 那麼此時就可以根據loss函式來計算了,包括重建的概率損失,以及隱空間變數和庫大小變數的kl散度。那麼imputation它是如何進行的呢?檢視 後我發現了,首先從資料集中載入已經擾亂過的資料 通過擾亂資料訓...

Python學習筆記 12 10章 XML

1 概覽 xml雖然比json複雜,在web中應用也不如以前多了,不過仍有很多地方在用,所以,有必要了解如何操作xml。1 dom vs sax 操作xml有兩種方法 dom和sax。dom會把整個xml讀入記憶體,解析為樹,因此占用記憶體大,解析慢,優點是可以任意遍歷樹的節點。sax是流模式,邊讀...