base64的原理與應(yīng)用

一. Base64編碼由來

? 為什么會有Base64編碼呢?因為有些網(wǎng)絡(luò)傳送渠道并不支持所有的字節(jié),例如傳統(tǒng)的郵件只支持可見字符的傳送,像ASCII碼的控制字符就 不能通過郵件傳送。這樣用途就受到了很大的限制,比如圖片二進制流的每個字節(jié)不可能全部是可見字符,所以就傳送不了。最好的方法就是在不改變傳統(tǒng)協(xié)議的情 況下,做一種擴展方案來支持二進制文件的傳送。把不可打印的字符也能用可打印字符來表示,問題就解決了。Base64編碼應(yīng)運而生,Base64就是一種 基于64個可打印字符來表示二進制數(shù)據(jù)的表示方法。

二. Base64編碼原理

看一下Base64的索引表,字符選用了"A-Z、a-z、0-9、+、/" 64個可打印字符。數(shù)值代表字符的索引,這個是標準Base64協(xié)議規(guī)定的,不能更改。

編號 字符 編號 字符 編號 字符 編號 字符
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

? 對字符A進行base64進行編碼,我們知道三個字節(jié)有24個位,就可以剛好對應(yīng)于4個Base64單元,即3個字節(jié)需要用4個Base64的可打印字符來表示。如圖man轉(zhuǎn)換為base64所示:

如果最后剩下兩個輸入數(shù)據(jù),在編碼結(jié)果后加1個“=”;如果最后剩下一個輸入數(shù)據(jù),編碼結(jié)果后加2個“=”;如果沒有剩下任何數(shù)據(jù),就什么都不要加,這樣才可以保證資料還原的正確性。

?

說起B(yǎng)ase64編碼可能有些奇怪,因為大多數(shù)的編碼都是由字符轉(zhuǎn)化成二進制的過程,而從二進制轉(zhuǎn)成字符的過程稱為解碼。而Base64的概念就恰好反了,由二進制轉(zhuǎn)到字符稱為編碼,由字符到二進制稱為解碼。

? Base64編碼主要用在傳輸、存儲、表示二進制等領(lǐng)域,還可以用來加密,但是這種加密比較簡單,只是一眼看上去不知道什么內(nèi)容罷了,當然也可以對Base64的字符序列進行定制來進行加密。

python應(yīng)用如下

python 將字符轉(zhuǎn)換為base64方法如下

import base64

encode_str = base64.b64encode(b'A')
print(encode_str)  # 將A轉(zhuǎn)換為base64為QQ==

decode_str = base64.b64decode(encode_str)  # 將QQ==解碼
print(decode_str)

轉(zhuǎn)載于:

[1] http://blog.csdn.net/wodeyuer125/article/details/45150223

[2] http://www.cnblogs.com/chengmo/archive/2014/05/18/3735917.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 為什么要進行Base64編碼 Base64最早就是用于郵件傳輸協(xié)議中的,原因是郵件傳輸協(xié)議只支持ASCII字符傳遞...
    Longshihua閱讀 11,730評論 0 11
  • 一、Base64編碼由來 為什么會有Base64編碼呢?因為有些網(wǎng)絡(luò)傳送渠道并不支持所有的字節(jié),例如傳統(tǒng)的郵件只支...
    爐石不傳說閱讀 1,447評論 0 1
  • CTF中那些腦洞大開的編碼和加密 0x00 前言 正文開始之前先閑扯幾句吧,玩CTF的小伙伴也許會遇到類似這樣的問...
    查無此人asdasd閱讀 6,457評論 0 19
  • 最近學Python的時候遇到了編碼問題,順帶了解了一下base64編碼,首先閱讀了咱CSDN上的一篇文章Base6...
    連命都給你了閱讀 957評論 0 3
  • 世間焉有雙全法 不負如來不負卿 今天雖然有點兒忙碌,但還是很開心,又見證了一位姐妹人生中最幸福的時刻...
    壹次心_30f7閱讀 214評論 0 0

友情鏈接更多精彩內(nèi)容