3.1 Base 64编码
Base 64 编码采用了US-ASCII 的65个字符集,每个字符都由6位来表示(0- 2 6-1),而第65位字符“=”用来表示字符串的结束。
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字节) 为一位组,输出为4个编码后的字符,编码过程从左到右。24位的输入组实际上是3个八位的单字节构成,编码时24位被视为4个6位(0-63)的组合,每个6位再按照base64字母表编码为一个字符。(编码时位的顺序?)
输出行每行不应多于76个字符,编码表中没有的字符将被忽略。
当输入位数小于24位时,右边补0直到位数构成6位的倍数。
换行符必须转换成由base64编码过的CRLF字符序列。
如果遇到“=”,则可说明已到达字符串结尾。
数据的结尾用“=”填充,下列为“=”使用的情况:
1) 当输入位数为24位的整数倍的时候,编码后的输出单元为4的整倍数,此时输出结尾没有“=”。
2) 若输入流的最后单位是8位时,末尾将会有两个“=”。
3) 若输入流的最后单位是16位,末尾将会有一个“=”。
程序流程:
1) 编码:输入-原文。
逐个扫描输入字节,每六位转换成base64字符,直到结束。注意换行,以及结尾“=”符号处理。
2) 解码:输入-译文base64代码
判断是否为合法字符,逐个输入译文符号,没3字节(24bits)进行一次处理。注意结尾“=”的处理。