01.base64

如果哪裏有錯誤希望大家指出,我將不勝感激,如果有任何想法也歡迎留言。
筆記本身也是給我自己寫的,所以如果有侵權的請通知我,我立即刪除。

1.base64的作用

我們知道在計算機中任何數據都是按ascii碼存儲的,而ascii碼的128~255之間的值是不可見字符。而在網絡上交換數據時,比如說從A地傳到B地,往往要經過多個路由設備,由於不同的設備對字符的處理方式有一些不同,這樣那些不可見字符就有可能被處理錯誤,這是不利於傳輸的。所以就先把數據先做一個Base64編碼,把所有字符統統變成可見字符,這樣出錯的可能性就大降低了。
  這裏也補充一下ASCII碼的種類,一共有三部分:
- 第一部分:ASCII非打印控制字符- 第二部分:ASCII打印字符- 第三部分:擴展ASCII打印字符
  第一部分:ASCII表上的數字0–31分配給了控制字符,用於控制像打印機等一些外圍設備。例如,12代表換頁/新頁功能。此命令指示打印機跳到下一頁的開頭。(參詳ASCII碼錶中0-31)。
  第二部分:數字 32–126 分配給了能在鍵盤上找到的字符,當您查看或打印文檔時就會出現。數字127代表 DELETE 命令。(參詳ASCII碼錶中32-127)
  第三部分:擴展的ASCII字符滿足了對更多字符的需求。擴展的ASCII包含ASCII中已有的128個字符,又增加了128個字符,總共是256個。即使有了這些更多的字符,許多語言還是包含無法壓縮到256個字符中的符號。因此,出現了一些ASCII的變體來囊括地區性字符和符號。例如,許多軟件程序把ASCII表(又稱作ISO8859-1)用於北美、西歐、澳大利亞和非洲的語言。
  《ASCII碼錶完整版
  如果有興趣可以看看《完整ASCII字符表》,ASCII碼是如何表示簡體、繁體和日語等圖形文字的。

2.base64的操作流程

2.1 理論

每個ASCII碼都是一個字節8位,既然要幹掉不可見字符,就不能再用8位爲一個單位了,我現在用6個字節爲一個單位,2^6=64,base64正好是64位,正好夠用。那麼原來8位在ASCII中代表的那個字符,在base64中代表什麼呢?又有了一個新的表。如果覺得有點難懂,就直接看例子。新的表如下圖所示
0 A  17 R   34 i   51 z
1 B  18 S   35 j   52 0
2 C  19 T   36 k   53 1
3 D  20 U   37 l   54 2
4 E  21 V   38 m   55 3
5 F  22 W   39 n   56 4
6 G  23 X   40 o   57 5
7 H  24 Y   41 p   58 6
8 I  25 Z   42 q   59 7
9 J  26 a   43 r   60 8
10 K  27 b   44 s   61 9
11 L  28 c   45 t   62 +
12 M  29 d   46 u   63 /
13 N  30 e   47 v
14 O  31 f   48 w   
15 P  32 g   49 x
16 Q  33 h   50 y

2.2 位數正好的例子

例如目前有三個字符:Man

avatar

M的ASCII碼是77,取前六位作爲新的字符,這個字符在上面的表中查找,19是T,所以這個位對應的是T,以此類推,最後Man的base64編碼就是TWFu。

2.3 位數不足的例子

之前有三個字符,3*8=24,24是可以被6整除的,如果有兩個字符,2*8=16,16不能被6整除。

avatar

兩個字節:兩個字節共16個二進制位,依舊按照規則進行分組。此時總共16個二進制位,每6個一組,則第三組缺少2位,用0補齊,得到三個Base64編碼,第四組完全沒有數據則用“=”補上。因此,上圖中“BC”轉換之後爲“QKM=”;  一個字節:一個字節共8個二進制位,依舊按照規則進行分組。此時共8個二進制位,每6個一組,則第二組缺少4位,用0補齊,得到兩個Base64編碼,而後面兩組沒有對應數據,都用“=”補上。因此,上圖中“A”轉換之後爲“QQ==”;

3.注意事項

大多數編碼都是由字符串轉化成二進制的過程,而Base64的編碼則是從二進制轉換爲字符串。與常規恰恰相反,  Base64編碼主要用在傳輸、存儲、表示二進制領域,不能算得上加密,只是無法直接看到明文。也可以通過打亂Base64編碼來進行加密。  中文有多種編碼(比如:utf-8、gb2312、gbk等),不同編碼對應Base64編碼結果都不一樣。
一篇文章徹底弄懂Base64編碼原理》這裏圖有點問題,我重新畫的

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