2013年11月3日 星期日

Base64編碼

[整理自wiki]
Base64是一種基於64個可列印字元來表示二進制數據的表示方法。由於2的6次方等於64,所以每6個位元為一個單元,對應某個可列印字元。三個位元組有24個位元,對應於4個Base64單元,即3個位元組需要用4個可列印字元來表示。它可用來作為電子郵件的傳輸編碼。

  • 編碼「Man」
文本 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
在此例中,Base64演算法將三個字元編碼為4個字元
Base64索引表:
Value Char Value Char Value Char Value Char
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 /

如果要編碼的位元組數不能被3整除,最後會多出1個或2個位元組,那麼可以使用下面的方法進行處理:先使用0位元組值在末尾補足,使其能夠被3整 除,然後再進行base64的編碼。在編碼後的base64文本後加上一個或兩個'='號,代表補足的位元組數。也就是說,當最後剩餘一個八位位元組(一 個byte)時,最後一個6位的base64位元組塊有四位是0值,最後附加上兩個等號;如果最後剩餘兩個八位位元組(2個byte)時,最後一個6位的 base位元組塊有兩位是0值,最後附加一個等號。 參考下表:

下表中,A只有一個Byte還缺二個Byte,所以最後要加二個=
下表中,BC只有二個Byte還缺一個Byte,所以最後要加一個=
文本(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

沒有留言:

張貼留言