base64是網路上最常見的用於傳輸
8bit
位元組**的編碼方式之一,在了解
base64
編碼之前,先了解幾個基本概念:位、位元組。
位:"位
(bit)"
是計算機中最小的資料單位。每一位的狀態只能是0或
1;位元組:8個二進位制位構成1個
"位元組(byte)"
,位元組是儲存空間的基本計量單位。
1個位元組可以儲存
1個英文本母,
2個位元組可以儲存
1個漢字;
base64編碼的作用
因為有些網路傳送渠道並不支援所有的位元組,例如傳統的郵件只支援
可見字元
的傳送,像ascii碼的
控制字元
就不能通過郵件傳送。這樣就受到了很大的限制,比如二進位製流的每個位元組不可能全部是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協議的情況下,開闢一種新的方案來支援二進位制檔案的傳送。
把不可見字元用可見字元來表示
。而base64就是一種基於
64個可見字元來表示二進位制資料的表示方法。
擴充套件:不可見字元其實並不是不顯示,只是這些字元在螢幕上顯示不出來,比如:換行符、回車、退格......字元。
base64編碼的原理
base64可以將
ascii
字串或者是二進位制編碼成只包含
a—z,
a—z,
0—9,+,
/ 這64個字元(
26個大寫字母,
26個小寫字母,
10個數字,1個
+,乙個
/ 剛好
64個字元)。這
64個字元用6個
bit位就可以全部表示出來,乙個位元組有8個
bit
位,那麼還剩下兩個
bit位,這兩個
bit位用
0來補充。其實,乙個
base64
字元仍然是8個
bit位,但是有效部分只有右邊的6個
bit,左邊兩個永遠是0。
base64的編碼規則是將3個
8位位元組
(3×8=24位)
編碼成4個6
位的位元組
(4×6=24位)
,之後在每個6位位元組前面,補充兩個
0,形成4個
8位位元組的形式,那麼取值範圍就變成了0~63。又因為2的
6次方等於
64,所以
每6個位組成乙個單元
。擴充套件:1、為什麼取值範圍是
0~63
?可以回顧一下二進位制轉換10進製的方法:
最小的二進位制:00000000轉換為
10進製的結果是
0;最大的二進位制:00111111轉換為
10進製的結果是:
0×27+0×26+1×25+1×24+1×23+1×22+1×21+1×20 = 63
base64將
3個位元組轉變為
4個位元組,因此,編碼後的**量(以位元組為單位)約比編碼前的**量多了
1/3。如果**量正好是
3的整數倍,那麼恰好多了
1/3。但如果不是,那麼,當多出的**量不是
3的整數倍時,**量除以
3的餘數就是2或者
1。轉換的時候,結果不夠
6位的用
0來補上相應的位置,之後再在
6位的前面補兩個
0。轉換完空出的結果就用就用
「=」來補位,總之要保證
最後編碼出來得位元組數是4的倍數
。2、為什麼要保證最後編碼出來的位元組數是4的倍數?
因為base64編碼時,是將
3個位元組轉變為
4個位元組,最終得到的位元組數必然是
4的倍數
base64編碼的乙個主要目的,是把任何字元都用「可視
」字元表現出來。先把字串拆開,成為六位二進位制(前兩位補零)的形式,這樣每個字元的範圍都在
0-63
之間了。再用
base64
的編碼表,把取值範圍在
0-63
的字元變成「可視
」字元。如果不加零或只加乙個零,那麼取值範圍就會是
0-255
或0-127
,base64
的編碼表就要重新規定了。
擴充套件:為什麼取值範圍限制在0~63而不是
0~255
或者0~127
?估計可見字元有限,沒有那麼多的可見字元或者是base64編碼的規則、約定
下圖是base64編碼對照表,
數值代表字元的索引,這個是標準base64協議規定的,不能更改。
舉例:例1:
字元:slf
對應ascii碼:
s:83 l:76 f:70
轉換成對應的二進位制:
83:01010011、76
:01001100、70
:01000110
為了解釋更加清晰,以下圖示例:
例2:字元:m
對應ascii碼:m:
77轉換成對應的二進位制:
77:01001101
轉換結果:
總結:base64編碼並不是真正的加密方式,它只是從二進位製到字元的轉換過程,說
base64
編碼是加密方法,只是因為經過
base64
編碼之後,讓人一眼看上去不知道什麼內容而已。
Base64編碼原理分析
base64是網路上最常見的用於傳輸 8bit 位元組 的編碼方式之一,在了解 base64 編碼之前,先了解幾個基本概念 位 位元組。位 位 bit 是計算機中最小的資料單位。每一位的狀態只能是0或 1 位元組 8個二進位制位構成1個 位元組 byte 位元組是儲存空間的基本計量單位。1個位元組可...
Base64編碼原理分析
base64是網路上最常見的用於傳輸8bit位元組 的編碼方式之一,在了解base64編碼之前,先了解幾個基本概念 位 位元組。位 位 bit 是計算機中最小的資料單位。每一位的狀態只能是0或1 位元組 8個二進位制位構成1個 位元組 byte 位元組是儲存空間的基本計量單位。1個位元組可以儲存1個...
Base64編碼原理分析
base64是網路上最常見的用於傳輸8bit位元組 的編碼方式之一,在了解base64編碼之前,先了解幾個基本概念 位 位元組。位 位 bit 是計算機中最小的資料單位。每一位的狀態只能是0或1 位元組 8個二進位制位構成1個 位元組 byte 位元組是儲存空間的基本計量單位。1個位元組可以儲存1個...