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

 

 

 

 

 

 

 

 

 

 

 

编码原理

输入串以24bits3字节) 为一位组,输出为4个编码后的字符,编码过程从左到右。24位的输入组实际上是3个八位的单字节构成,编码时24位被视为46位(0-63)的组合,每个6位再按照base64字母表编码为一个字符。(编码时位的顺序?)

输出行每行不应多于76个字符,编码表中没有的字符将被忽略。

当输入位数小于24位时,右边补0直到位数构成6位的倍数。

换行符必须转换成由base64编码过的CRLF字符序列。

如果遇到“=”,则可说明已到达字符串结尾。

数据的结尾用“=”填充,下列为“=”使用的情况:

1)               当输入位数为24位的整数倍的时候,编码后的输出单元为4的整倍数,此时输出结尾没有“=”。

2)               若输入流的最后单位是8位时,末尾将会有两个“=”。

3)               若输入流的最后单位是16位,末尾将会有一个“=”。

程序流程:

1)  编码:输入-原文。

逐个扫描输入字节,每六位转换成base64字符,直到结束。注意换行,以及结尾“=”符号处理。

2)  解码:输入-译文base64代码

判断是否为合法字符,逐个输入译文符号,没3字节(24bits)进行一次处理。注意结尾“=”的处理。