Base64原理简介


 




Base64是一种编码方式,通常用于将二进制数据转换成可见字符的形式,该过程可逆。


过程大致如下:


1. 对64个可见字符,进行一个索引编码。索引是二进制的值,对应找到一个可见字符。












Base64 编码表

Value

Char


 


Value

Char


 


Value

Char


 


Value

Char

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

/









2.上面的表说明只要6位,就可以表示0-63的范围。


Base64先将每个字节转成二进制形式,每6位取值,将得到的值作为索引,到1.的表中索引到对应的可见字符。


而一个字节是8位,于是,就有2位多余了。多余了怎么办呢,与下一个字节拼接。


很明显,每3个字节,就可以编码成4个0-63的数字,对应4个字符。


 


用代码说话。




1 public static void main(String[] args) {
2 byte[] bytes = new byte[] { 1, 2, 3 };
3 System.out.println(new String(Base64.encodeBase64(bytes)));
4 }


我们来分析一下。

这个byte数组的二进制数据如下:

00000001  00000010  00000011

000000  010000  001000  000011

0      16      8     3

A      Q      I      D

因此,结果就是AQID。

Base64原理简介_二进制数

 

注意两点:


1)并不能保证每个数组个数都是3的倍数,因此,对于未能补成二进制位的,在后面补0,如下图A


2)原则上,Base64是最小4个字符一组,对于不足的字符,用=填充,如下图A, BC


Base64原理简介_码表_02



Base64是一种编码方式,通常用于将二进制数据转换成可见字符的形式,该过程可逆。


过程大致如下:


1. 对64个可见字符,进行一个索引编码。索引是二进制的值,对应找到一个可见字符。












Base64 编码表

Value

Char


 


Value

Char


 


Value

Char


 


Value

Char

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

/









2.上面的表说明只要6位,就可以表示0-63的范围。


Base64先将每个字节转成二进制形式,每6位取值,将得到的值作为索引,到1.的表中索引到对应的可见字符。


而一个字节是8位,于是,就有2位多余了。多余了怎么办呢,与下一个字节拼接。


很明显,每3个字节,就可以编码成4个0-63的数字,对应4个字符。


 


用代码说话。




1 public static void main(String[] args) {
2 byte[] bytes = new byte[] { 1, 2, 3 };
3 System.out.println(new String(Base64.encodeBase64(bytes)));
4 }


我们来分析一下。

这个byte数组的二进制数据如下:

00000001  00000010  00000011

000000  010000  001000  000011

0      16      8     3

A      Q      I      D

因此,结果就是AQID。

Base64原理简介_二进制数

 

注意两点:


1)并不能保证每个数组个数都是3的倍数,因此,对于未能补成二进制位的,在后面补0,如下图A


2)原则上,Base64是最小4个字符一组,对于不足的字符,用=填充,如下图A, BC


Base64原理简介_码表_02