BASE64編碼

BASE64是網絡上最常見的用於傳輸8Bit字節代碼的編碼方式之一,例如可以將小圖片直接編碼爲BASE64格式直接通過接口傳輸。

在RFC2045中是這樣定義的,BASE64內容傳送編碼被設計用來把任意序列的8位字節描述爲一種不易被人直接識別的形式。

BASE64要求把每三個8Bit的字節轉換爲四個6Bit的字節(3*8 = 4*6= 24),然後把6Bit再添兩位高位0,組成四個8Bit的字節,也就是說,轉換後的字符串理論上將要比原來的長1/3。

         例如:

                   轉換前 aaaaaabb  ccccdddd  eeffffff   (a,b,c,d,e,f代表0/1)

                   轉換後 00aaaaaa  00bbcccc  00ddddee  00ffffff

         上面的三個字節是原文,下面的四個字節是轉換後的Base64編碼,其前兩位均爲0。轉換後,用一個碼錶來得到目的字符串(也就是最終的BASE64編碼)

 

編碼表(RFC2045)

VALUE

ENCODING

VALUE

ENCODING

VALUE

ENCODING

VALUE

ENCODING

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

/

 

         再舉一例:

                   轉換前 1010110110111010 01110110   

                   轉換後 0010101100011011 00101001 00110110

                   十進制 43 27 4154

                   對應碼錶中的值 r b p2

         所以上面的24位編碼,編碼後的BASE64值爲 rbp2。解碼同理,把 rbq2 的二進制位連接上再重組得到三個8位值,得出原碼。

         但是原文的字節數量不一定是3的倍數。解決辦法是這樣的:原文的字節不夠的地方可以用全0來補足,轉換時BASE64編碼用=號來代替。這就是爲什麼有些BASE64編碼會以一個或兩個等號結束的原因,但等號最多隻有兩個。因爲:

         所以餘數任何情況下都只可能是0,1,2這三個數中的一個。如果餘數是0,就表示原文字節數正好是3的倍數。如果是1,爲了讓BASE64編碼是4的倍數,就要補2個等號;同理,如果是2,就要補1個等號。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章