峡谷最浪安琪拉的博客



Base64 是个啥?

1、什么是Base64

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一

Base64就是一种基于64个可打印字符来表示二进制数据的方法

Base64是一种编码算法。为什么叫Base64 ?因为这种算法只支持64个【可打印字符】

ASCII码对照表 :http://ascii.911cha.com



2、为什么使用Base64

base64 最早就是用来邮件传输协议中的,原因是邮件传输协议只支持 ascii 字符传递,因此如果要传输二进制文件,如:图片、视频是无法实现的。因此 base64 就可以用来将二进制文件内容编码为只包含 ascii 字符的内容,这样就可以传输了

Base64主要用于将不可打印的字符转换成可打印字符,或者简单的说将二进制数据编码成ASCII字符。


3、Base64 原理

编码:

转码前 :lmy  转码后:bG15

Base64 可以把原本ASCII码的控制字符甚至ASCII码之外的字符都转换成都可打印的 6bit 字符

在计算机中 1字节占8位  3*8=24 取最小公倍数 4*6=24 这就意味着我们可以用4个 Base64字符来表示3个传统的8bit的字符


lmy 对应的十进制分别是 108 109 121

二进制 :0110 1100    0110 1101   0111 1001

6个一组(4组)011011  000110  110101  111001


然而计算机是8位8位的存数 6不够,自动就补两个高位0了

00011011  00000110  00110101  00111001

转换成十进制分别是 27 6 53 57

参照Base64对照表分别得出 b G 1 5


Base64对照表

索引

对应字符

索引

对应字符

索引

对应字符

索引

对应字符

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



14

O

31

f

48

w



15

P

32

g

49

x



16

Q

33

h

50

y





相比 8bit 的字符编码,Base64编码会多占用三分之一的字节长度,以此为代价实现了更好的兼容性


问题:如果原来的8bit字符长度不是3的倍数,比如长度是4,多余的的1个字符怎么编码?

lmyz  最小公倍数是 48  6*8=48  8*6=46


lmyz 对应的十进制分别是 108 109 121 122

二进制 :0110 1100    0110 1101   0111 1001  0111 1010

6个一组(8组)011011  000110  110101  111001 011110 100000 000000 000000

不够的位用0来补  

转换成十进制分别是 27 6 53 57 30 32 = =         提示:十进制匹配不到的用 【=】字符填充

参照Base64对照表分别得出 b G 1 5 e g = =


解码:

解码也是同样的道理 6bit * 8的字符串可以每 8bit 分成一组,共6组。每一组转换成一个8位的byte字节。



4、总结

    Base64 只是一种编码算法,而非加密算法。任何人都可以将Base64的编码结果解码成唯一的原文

    加密算法有很多,例如MD5、SHA、AES、RSA等等,在今后的文章中我会一一介绍



文章参考公众号 程序员小灰

分享:

Contact ME

github:https://github.com/tebie6

email:liumingyuphp@163.com

友情链接

无敌我大鑫哥:http://dream128.cn