python3.0 base64 解密以及base64原理
python3.0
加密
>>> import base64
>>> s = '明文A'
>>> a = base64.b64encode(a)
>>> print (a)
輸出加密后的密文
解密
>>>s=base64.b64decode(a)
>>>print (s)
輸出解密后的密文
base32? 16? 加密解密改為based64.b 32/16 en/de code(a)
base64
定義:8bit字節代碼的編碼方式之一
用處:在HTTP環境下傳遞較長的標識信息? 具有不可讀性
介紹:Base64要求把每三個8Bit的字節轉換為四個6Bit的字節(3*8 = 4*6 = 24),然后把6Bit再添兩位高位0,組成四個8Bit的字節,也就是說,轉換后的字符串理論上將要比原來的長1/3
原理:
轉換過程:3*8=4*6? 內存一個字節占8位
轉換前:? ? s? ? ? 1? ? ? 3
ASICC? 115? 49? ? 51
二進制:? ? 01110011? ? ? ? 00110001? ? ? ? 00110011
6個一組(4組):? ? ? 011100? ? ? 110011? ? ? 000100? ? ? 110011
計算機是8位8位的儲存? 6不夠就自動補兩個高位0
變為? ? ? 00011100? ? ? 00110011? ? ? 00000100? ? ? 00110011
得到? ? ? 28? ? ? ? ? 51? ? ? 4? ? ? 51
查對表? c ? ? ? ? ? z? ? ? E? ? ? z
先以“迅雷下載”為例: 很多下載類網站都提供“迅雷下載”的鏈接,其地址通常是加密的迅雷專用下載地址。
其實迅雷的“專用地址”也是用Base64"加密"的,其過程如下:
一、在地址的前后分別添加AA和ZZ
二、對新的字符串進行Base64編碼
另: Flashget的與迅雷類似,只不過在第一步時加的“料”不同罷了,Flashget在地址前后加的“料”是[FLASHGET]
而QQ旋風的干脆不加料,直接就對地址進行Base64編碼了
規則:
①把3個字符變成4個字符..
②每76個字符加一個換行符..
③最后的結束符也要處理..
例子
1.
轉換前(原文):? ? ? ? ? ? aaaaaabb? ? ? ? ? ccccdddd? ? ? ? eeffffff
? ? ? ? ? ? ? ? ? ? ? ? ? ? aaaaaa? ? ? ? ? bbcccc? ? ? ? ddddee? ? ? ? ? ffffff
轉換后(Base64):? ? ? ? ? 00aaaaaa? ? ? ? 00bbcccc? ? ? ? 00ddddee? ? ? 00ffffff
2.二進制
轉換前(原文):? ? ? ? ? ? 11111111? ? ? ? 11111111? ? ? ? 11111111
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?111111? ? ? 111111? ? ? 111111? ? ? 111111
轉換后(Base64)? ? ? 00111111? ? ? ? 00111111? ? ? ? 00111111? ? ? ? 00111111
3.二進制
十進制? ? ? ? ? ? ? ? ? ? 173? ? ? ? 186? ? ? ? ? ? 118
轉換前(原文)? ? ? ? ? 10101101? ? ? ? 10111010? ? ? ? 01110110
? ? ? ? ? ? ? ? ? ? ? ?101011? ? ? 011011? ? ? 101001? ? ? 110110
轉換后(Base64)? ? 00101011? ? ? 00011011? ? ? ? 00101001? ? ? ? 00110110
十進制 ? ? ? ? ? ? ? ? ? ? ?43? ? ? 27? ? ? 41? ? ? 54
對應碼表中的值? ? r? ? ? b? ? ? p? ? ? 2
base64加密后為rbp2
解碼同理,把 rbq2 的二進制位連接上再重組得到三個8位值,得出原碼。