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

 

 

 

 

 

 

 

 

 

 

 

編碼原理

輸入串以24bits3字節(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é)尾“=”的處理。