阅读模式:

base64编码原理

查看:2630  回复:0  类型:  来源:php自学网  标签 base64

        base64编码是把字符串转为二进制后按照一定的分组、补位、十进制转换后,对照base64编码表而生成的编码算法。base64编码是可逆的,可以逆向解码生成明文。base64编码起初是为了解决电子邮件中不能直接使用非ASCII码字符的规定问题。base64编码常用于电子邮件加密、数据加密、base64规避反垃圾邮件和图片、文件的网络传输。

一、base64编码原理流程图

php-base64.png

二、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



三、base64编码举例

字符串:"zixuephp.net"

    1.把字符串每3个字符为一组,取其ascii编码,如果是中文取其unicode utf-8 16进制编码。(ascii编码对照表

zix           uep            hp.           net
--------------------------------------------------------  //每3个字符为1组,这里4组
122 105 120   117 101 112    104 112 46    110 101 116

    2.把ascii编码的10进制值转换成8位二进制,不足8位前面补0。

122      105       120         117      101     112         104     112       46         110      101      116
----------------------------------------------------------------------------------------------------------------------
01111010 01101001  01111000    01110101 01100101 01110000    01101000 01110000 00101110    01101110 01100101 01110100

    3.把二进制以每6位为一组组成新数据,并转换成10进制。如果没有6位,小于3位以0代替,如果有剩下的空组,以"="代替结果。

01111010 01101001  01111000    01110101 01100101 01110000    01101000 01110000 00101110    01101110 01100101 01110100
---------------------------------------------------------------------------------------------------------------------//6位新分组
011110 100110 100101 111000 011101 010110 010101 110000 011010 000111 000000 101110 011011 100110 010101 110100
---------------------------------------------------------------------------------------------------------------------//2转10进制
30     38     37     56     29     22     21     48     26     7      0      46     27     38     21     52

    4.对应base64编码对照表获取对应字符

30     38     37     56     29     22     21     48     26     7      0      46     27     38     21     52
------------------------------------------------------------------------------------------------------------
e      m      l      4      d      W      V      w      a      H      A      u      b      m      V      0

最后base64字符串为:

eml4dWVwaHAubmV0

<?php
echo base64_encode('zixuephp.net');
//eml4dWVwaHAubmV0

四、其他举例

    1.字符串;"ABCD",每3个字符为一组,少两组末尾补“==“,每6位一新组时不够3位补0,对应值A。如图:

base64编码图

    2.中文的base64编码,字符串:“自学网”,

        字符串先转16进制为:

e887aa  e5ada6  e7bd91

        最后按照上面步骤转换成二进制->6位分新组->转10进制->base64对照表->输出base64编码。

//base64编码结果
6Ieq5a2m572R

测试工具:

字符串转16进制工具

进制互转工具

base64编码解码工具

分享到:
1 0

发布评论:


登录:
  表情:
提交