3.1 Base 64編碼
Base 64 編碼采用了US-ASCII 的65個(gè)字符集,每個(gè)字符都由6位來表示(0- 2 6-1),而第65位字符“=”用來表示字符串的結(jié)束。
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
|
64(pad)
|
=
|
14
|
O
|
31
|
f
|
48
|
w
|
|
|
15
|
P
|
32
|
g
|
49
|
x
|
|
|
16
|
Q
|
33
|
h
|
50
|
y
|
|
|
|
|
|
|
|
|
|
|
編碼原理
輸入串以24bits(3字節(jié)) 為一位組,輸出為4個(gè)編碼后的字符,編碼過程從左到右。24位的輸入組實(shí)際上是3個(gè)八位的單字節(jié)構(gòu)成,編碼時(shí)24位被視為4個(gè)6位(0-63)的組合,每個(gè)6位再按照base64字母表編碼為一個(gè)字符。(編碼時(shí)位的順序?)
輸出行每行不應(yīng)多于76個(gè)字符,編碼表中沒有的字符將被忽略。
當(dāng)輸入位數(shù)小于24位時(shí),右邊補(bǔ)0直到位數(shù)構(gòu)成6位的倍數(shù)。
換行符必須轉(zhuǎn)換成由base64編碼過的CRLF字符序列。
如果遇到“=”,則可說明已到達(dá)字符串結(jié)尾。
數(shù)據(jù)的結(jié)尾用“=”填充,下列為“=”使用的情況:
1) 當(dāng)輸入位數(shù)為24位的整數(shù)倍的時(shí)候,編碼后的輸出單元為4的整倍數(shù),此時(shí)輸出結(jié)尾沒有“=”。
2) 若輸入流的最后單位是8位時(shí),末尾將會(huì)有兩個(gè)“=”。
3) 若輸入流的最后單位是16位,末尾將會(huì)有一個(gè)“=”。
程序流程:
1) 編碼:輸入-原文。
逐個(gè)掃描輸入字節(jié),每六位轉(zhuǎn)換成base64字符,直到結(jié)束。注意換行,以及結(jié)尾“=”符號(hào)處理。
2) 解碼:輸入-譯文base64代碼
判斷是否為合法字符,逐個(gè)輸入譯文符號(hào),沒3字節(jié)(24bits)進(jìn)行一次處理。注意結(jié)尾“=”的處理。