Base64 加密

原理

這是一種比較廣泛的加密方式,但也正因爲它比較廣泛所以容易被破解
經典的base64規則:
先對原串進行操作:3個字符放到一起(3*8=24個bit位),對這24個bit位分爲4組,每組6個bit位,每組的前面再補2個0

例如原串:01001000 01001111 01001010
操作之後:00010010 00000100 00111101 00001010
總的來說長度會增加1/3
而且因爲每個字符只有6位可能不爲0,所以實際上有26=64種操作結果字符,所以叫base64

爲了顯示這64種,有如下編碼表(僅序號,非真實二進制):
0—25對應A—Z
25—51對應a—z
52—61對應0—9
62對應+
63對應/

在末位,如果湊不夠3個字符(24位),則補若干個全0字節
比如單個字母A,只有8位,就會被補全爲:A的ascii,8個0,8個0
分組之後可能有的操作結果是全0,這種的對應=,這也是base64編碼的特點,結尾因爲補0有時會產生一個或兩個=

例如:
A的ascii是65,所以當單個A轉換時:
01000001 00000000 00000000
轉換:00010000 00010000 00000000 00000000
發現最後兩個都是=


python3的實現

python的標準庫提供了base64,只要import base64即可
比較常用的有

base64.b64encode([bytes])
base64.urlsafe_b64encode([bytes])

第二個和第一個的區別是,因爲base64中會產生/,+這兩種url中會轉義的字符,所以在url使用中先將/,+轉化爲下劃線與短槓,接收者做相反操作,從而可以在url中安全傳輸

在python3中,str默認編碼是unicode,並不能直接傳入bytes,所以在加密前需要先轉碼(否則報錯a bytes-like object is required, not 'str'

import base64
a=input()
print(base64.b64encode(a.encode('utf-8')))#先轉bytes再加密

這樣即可,utf-8的轉碼將str轉爲了bytes

輸出的結果是b’密文’,說明結果是bytes型的,可以強制轉換成str從而去掉b

import base64
a=input()
b=base64.b64encode(a.encode('utf-8'))#b是一個bytes類型
c=str(b,"utf-8")#轉換爲str
print(c)

解密過程是decode

base64.b64decode([bytes, bytearray, memoryview, str])
base64.urlsafe_b64decode([bytes, bytearray, memoryview, str])

和加密的區別是可以直接填入str類型,所以密文不一定要先轉化爲bytes
但返回值仍然是bytes

import base64
a=input()
print(base64.b64decode(a))

解密過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章