Base64 转 图片,请参考 Base64 转图片

ASCII 码字符占 8 位二进制,而 Base64 占 6 位,取最小公倍数即为 24,即可以用 4 个 base64 字符去表示 3 个 ASCII 码字符。一个字节 8bit 存在 256 个状态,而一个 Base64 字符只有 64 个状态。

机智的人们于是规定,用每 4 个 Base64 字符去表示 3 个二进制字节,因为:64 * 64 * 64 * 64 = 256 * 256 * 256。

因为,Base64 将三个字节转化成四个字节,所以 Base64 编码后的文本长度,比原始文本长度多 4/3≈1.33 倍。

选出 64 个字符——大写字母 A-Z、小写字母 a-z、数字 0-9、符号 "+"、"/"(再加上作为垫字的 "=",实际上是 65 个字符,垫字是当生成的 Base64 字符串的个数不是 4 的倍数时,添加在尾部的字符),作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。

比如字符串 ABC,对应的二进制序列为 01000001 01000010 01000011,按 6 位分组后为 010000 010100 001001 000011,每个 6 位二进制前补 2 个 0 变成一个字节,最后是 00010000 00010100 00001001 00000011,根据编码表得到 Base64 字符串 QUJD。

Base64 编码表

码值

二进制

字符

0

000000

A

1

000001

B

2

000010

C

3

000011

D

4

000100

E

5

000101

F

6

000110

G

7

000111

H

8

001000

I

9

001001

J

10

001010

K

11

001011

L

12

001100

M

13

001101

N

14

001110

O

15

001111

P

16

010000

Q

17

010001

R

18

010010

S

19

010011

T

20

010100

U

21

010101

V

22

010110

W

23

010111

X

24

011000

Y

25

011001

Z

26

011010

a

27

011011

b

28

011100

c

29

011101

d

30

011110

e

31

011111

f

32

100000

g

33

100001

h

34

100010

i

35

100011

j

36

100100

k

37

100101

i

38

100110

m

39

100111

n

40

101000

o

41

101001

p

42

101010

q

43

101011

r

44

101100

s

45

101101

t

46

101110

u

47

101111

v

48

110000

w

49

110001

x

50

110010

y

51

110011

z

52

110100

0

53

110101

1

54

110110

2

55

110111

3

56

111000

4

57

111001

5

58

111010

6

59

111011

7

60

111100

8

61

111101

9

62

111110

+

63

111111

/