字符編碼之Base64

博學,切問,近思--詹子知(http://blog.csdn.net/zhiqiangzhan) 

1.什麼是Base64.

Base64是網絡上最常見的用於傳輸8Bit字節代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細規範。

它採用64個可見的基本字符去傳輸所有信息,因此即使被不同的編碼顛來倒去的編碼解碼也不會造成數據丟失。

索引 對應字符 索引 對應字符 索引 對應字符 索引 對應字符
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.Base64的優勢。

  1. 編碼解碼速度快。
  2. 具有一定的加密效果。
  3. 實現簡單。
  4. 編碼解碼速度快。

3.實現原理。

Base64要求把每三個8Bit的字節轉換爲四個6Bit的字節(3*8 = 4*6 = 24),然後把6Bit再添兩位高位0,組成四個8Bit的字節,因此, 轉換後的字節一定會落在區間[0-64)當中,故此可以找到對應基本字符表示此字節,轉換後的字符串理論上將要比原來的長1/3。

我們來看一個例子。

轉換前:10101111 01101011 11001101
轉換後:00101011 00110110 00101111 00001101

 

 

編碼轉換規則:

  1. 用指定的編碼對字符串進行解碼,得到解碼後的字節數組。
  2. 按照規則把每3個字節轉換爲4個Base64基本字符。
  3. 處理最後的字節
    • 剩餘的字節爲0,編碼轉換結束。
    • 剩餘的字節爲1,把當前字節按照規則轉換爲Base64前兩個字符,後面兩位用'='補齊,編碼轉換結束。
    • 剩餘的字節爲1,把當前字節按照規則轉換爲Base64前三個字符,最後一位用'='補齊,編碼轉換結束。
  4. 得到編碼後的Base64 String。


解碼轉換規則:

  1. 準備好需要解碼的Base64 String。
  2. 每4個一組,轉換爲對應的3個字節。
  3. 處理最後剩餘的字符。
  4. 得到解碼後的字節數組。

 

4.通用的編碼傳輸解決方案。

  1. 使用UTF-8對需要傳輸的String進行編碼,得到編碼後的字節數組。
  2. 用Base64對字節數組進行編碼,得到Base64 String。
  3. 傳輸編碼後的Base64 String。
  4. 接收到傳輸到字節數組, 如果是字節數組,用本地編碼對其進行解碼即可,得到Base64 String。
  5. 用Base64對 Base64 String 進行解碼,得到字節數組。
  6. 用UTF-8對字節數組進行解碼,得到最終被傳輸的String。

5.Java 實現。

  

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