1. 程式人生 > >base64原理,使用場景

base64原理,使用場景

target 方法 資料 內容 符號 進制 一個 打包 bcd

Base64編碼,是我們程序開發中經常使用到的編碼方法。它是一種基於用64個可打印字符來表示二進制數據的表示方法。它通常用作存儲、傳輸一些二進制數據編碼方法!也是MIME(多用途互聯網郵件擴展,主要用作電子郵件標準)中一種可打印字符表示二進制數據的常見編碼方法!它其實只是定義用可打印字符傳輸內容一種方法,並不會產生新的字符集!有時候,我們學習轉換的思路後,我們其實也可以結合自己的實際需要,構造一些自己接口定義編碼方式。好了,我們一起看看,它的轉換思路吧!

Base64實現轉換原理

它是用64個可打印字符表示二進制所有數據方法。由於2的6次方等於64,所以可以用每6個位元為一個單元,對應某個可打印字符。我們知道三個字節有24個位元,就可以剛好對應於4個Base64單元,即3個字節需要用4個Base64的可打印字符來表示。在Base64中的可打印字符包括字母A-Z、a-z、數字0-9 ,這樣共有62個字符,此外兩個可打印符號在不同的系統中一般有所不同。但是,我們經常所說的Base64另外2個字符是:“+/”。這64個字符,所對應表如下。

編號字符 編號字符 編號字符 編號字符
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 /

轉換的時候,將三個byte的數據,先後放入一個24bit的緩沖區中,先來的byte占高位。數據不足3byte的話,於緩沖區中剩下的bit用0補足。然後,每次取出6個bit,按照其值選擇
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
中的字符作為編碼後的輸出。不斷進行,直到全部輸入數據轉換完成。

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

編碼後的數據比原始數據略長,為原來的4/3。無論什麽樣的字符都會全部被編碼,因此不像Quoted-printable 編碼,還保留部分可打印字符。所以,它的可讀性不如Quoted-printable編碼!

文本 M a n
ASCII編碼 77 97 110
二進制位 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
索引 19 22 5 46
Base64編碼 T W F u

M的Ascii碼是77,前六位對應值為19,對應base64字符是T,如此類推。其它字符編碼就可以自動轉換得到!我們看看另外不是剛好是3個字節的情況!

文本(1 Byte) A
二進制位 0 1 0 0 0 0 0 1
二進制位(補0) 0 1 0 0 0 0 0 1 0 0 0 0
Base64編碼 Q Q = =
文本(2 Byte) B C
二進制位 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1 x x x x x x
二進制位(補0) 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 x x x x x x
Base64編碼 Q k M =
  1. 應用場景
  2. 電子郵件

    這個可參考阮一峰的《MIME筆記》

  3. 微軟的MHT格式

    這是模仿郵件格式將多種資源打包在一個文件中的格式,所有二進制資源都采用 Base64 編碼。

  4. XML文件

    這是一個純文本文件,如果要基於 XML 格式設計可以保存圖片或其它附件的數據格式,那就需要將這些二進制數據轉碼成 ASCII 字符。

  5. DATA URL

    最近流行起來的 Data URL,要在URL中使用二進制數據,當然也只能進行 ASCII 編碼

base64原理,使用場景