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是流模式,邊讀...