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




