base64的原理及實際運用講解

2022-09-23 12:57:07 字數 1830 閱讀 8560

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

用記事本開啟exe、jpg、pdf這些檔案時,我們都會看到一大堆亂碼,因為二進位制檔案包含很多無法顯示和列印的字元,所以,如果要讓記事本這樣的文字處理軟體能處理二進位制資料,就需要乙個二進位製到字串的轉換方法。base64是一種最常見的二進位制編碼方法。

base64的原理很簡單,首先,準備乙個包含64個字元的陣列:

['a', 'b', 'c', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']然後,對二進位制資料進行處理,每3個位元組一組,一共是3x8=24bit,劃為4組,每組正好6個bit:

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

所以,base64編碼會把3位元組的二進位制資料編碼為4位元組的文字資料,長度增加33%,好處是編碼後的文字資料可以在郵件正文、網頁等直接顯示。

如果要編碼的二進位制資料不是3的倍數,最後會剩下1個或2個位元組怎麼辦?base64用\x00位元組在末尾補足後,再在編碼的末尾加上1個或2個=號,表示補了多少位元組,解碼的時候,會自動去掉。

python內建的base64可以直接進行base64的編譯碼:

>>> import base64

>>> base64.b64encode(b'binary\x00string')

b'ymluyxj5ahn0cmluzw=='

>>> base64.b64decode(b'ymluyxj5ahn0cmluzw==')

b'binary\x00string'由於標準的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'還可以自己定義64個字元的排列順序,這樣就可以自定義base64編碼,不過,通常情況下完全沒有必要。

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

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

由於=字元也可能出現在base64編碼中,但=用在url、cookie裡面會造成歧義,所以,很多base64編碼後會把=去掉:

# 標準base64:

'abcd' -> 'ywjjza=='

# 自動去掉=:

'abcd' -> 'ywjjza'去掉=後怎麼解碼呢?因為base64是把3個位元組變為4個位元組,所以,base64編碼的長度永遠是4的倍數,因此,需要加上=把base64字串的長度變為4的倍數,就可以正常解碼了。

base64是一種任意二進位製到文字字串的編碼方法,常用於在url、cookie、網頁中傳輸少量二進位制資料。

請寫乙個能處理去掉=的base64解碼函式:

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

import base64# 測試:

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')

Base64的原理及實現

base64編碼原理 第一步,每三個位元組作為一組,一共是24位二進位制數。第二步,將24位二進位制數分為四組,每組有6位二進位制。第三步,在每組前面加兩個0 即00 擴充套件成32個二進位制位,即四個位元組。以上三步將3個位元組擴充套件成4個位元組。第四步,根據base64的編碼表將其編碼,編碼表...

C 處理base64 以及base64的原理分析

base64的原理,base64的碼表只有64個字元,如果要表達64個字元的話,使用6的bit即可完全表示 2的6次方為64 因為base64的編碼只有6個bit即可表示,而正常的字元是使用8個bit表示,8和6的最小公倍數是24,所以4個base64字元可以表示3個標準的ascll字元 publi...

BASE64 編碼原理

unit ubase64 編碼原理 將3個位元組轉換成4個位元組 3 x 8 24 4x6 先讀入3個位元組,每讀乙個位元組,左移8位,再右移四次,每次6位,這樣就有4個 位元組了。解碼原理 將4個位元組轉換成3個位元組,先讀入4個6位 用或運算 每次左 移6位,再右移3次,每次8位,這樣就還原了。...