Base64是一種很常見(jiàn)的編碼規范,其作用是將二進(jìn)制序列轉換為人類(lèi)可讀的ASCII字符序列,常用在需用通過(guò)文本協(xié)議(比如HTTP和SMTP)來(lái)傳輸二進(jìn)制數據的情況下。Base64并不是一種用于安全領(lǐng)域的加密解密算法(這類(lèi)算法有DES等),盡管我們有時(shí)也聽(tīng)到使用Base64來(lái)加密解密的說(shuō)法,但這里所說(shuō)的加密與解密實(shí)際是指編碼(encode)和解碼(decode)的過(guò)程,其變換是非常簡(jiǎn)單的,僅僅能夠避免信息被直接識別。
Base64采用了一種很簡(jiǎn)單的編碼轉換:對于待編碼數據,以3個(gè)字節為單位,依次取6位數據并在前面補上兩個(gè)0形成新的8位編碼,由于3*8=4*6,這樣3個(gè)字節的輸入會(huì )變成4個(gè)字節的輸出,長(cháng)度上增加了1/3。
上面的處理還不能保證得到的字符都是可見(jiàn)字符,為了達到此目的,Base64制定了一個(gè)編碼表,進(jìn)行統一的轉換。碼表的大小為2^6=64,這也是Base64名稱(chēng)的由來(lái)。
Base64編碼表
Value Encoding Value Encoding Value Encoding Value Encoding
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 (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
Base64編解碼算法都很簡(jiǎn)單,網(wǎng)上有很多源碼,這里就不介紹了。
另外還有一點(diǎn)要注意的地方,前面提到編碼是以3個(gè)字節為單位,當剩下的字符數量不足3個(gè)字節時(shí),則應使用0進(jìn)行填充,相應的,輸出字符則使用‘=‘占位,因此編碼后輸出的文本末尾可能會(huì )出現1至2個(gè)‘=‘。
這是一種典型的編碼轉換的處理方法,類(lèi)似的可能還有UTF16與UTF8之間的轉換。

