牛骨文教育服务平台(让学习变的简单)
博文笔记

Base64和MD5加密

创建时间:2014-05-14 投稿人: 浏览次数:1523

Base64--网络传输

自从引用以来,Base64编码的标准极普及为的迅速。不过,把文件作为附件通过网际邮件扩充协议(MIME)传送时,Base64是标准的编码标准。然而,几乎所有的电子邮件客户端都是用MIME发送文件(以附件形式)的,这就意味着大多数的电子邮件客户端使用Base64对文件编码后通过网络传输。格式如下:

Content-Transfer-Encoding:base64(Gb2312)

这种传输格式又被称为U-t-U(Unixto Unix)传输协议,能兼容大多数的硬件设备并基于其上进行无损字节传输。但是缺点在于是,使用此种格式会使文件的大小增加百分之四十左右。

除了作为MIME的默认编码标准,base64编码也广泛用于其他领域。一个常见的例子是用于网络服务器完成基于HTTP的基本认证。当服务器想限制访问某些文件时,通过使用基于HTTP的基本认证系统,便可以对这些文件进行密码保护。而基本认证使用Base64编码标准对用户名和密码进行编码。这样,黑客们使用TCP通过端口连接ESMTP服务器时,手动输入量就会大大增加。

尽管Base64编码受到广泛的支持和应用,但却是当今最弱的编码标准之一,通过以下步骤就可以轻易地进行逆向工程。不仅仅是算法上的容易逆向,因为在网络上Base64用纯文本形式发送密码,使得Base64加密文本很容易受到sniffer程序的嗅探。

编码程序如下:

  1. 将要加密的文本的每个字符转换成标准的ASCII十进制码。

  2. 通过任何一种方式(手算、机器算、对照表格)将这部分十进制编码转换成二进制(文章最后附有转换表)编码。每个十进制码都对应器等价的八位二进制数值。

  3. 将这部分二进制数连结到一起,产生一串二进制数。

  4. 将这一大片的二进制字符串分割成每6个字符为一部分的小块。

  5. 通过任何一种方式(手算、机器算、对照表格)将这部分6字符的小块分别转换成相应的等价十进制数。

  6. 通过Base64表转换成Base64编码。

Base64编码转换表如下:

十进制

编码

十进制

编码

十进制

编码

十进制

编码

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

/

例如:mne,通过ASCII字符表转化为是进制值为:m、109,n,110,e、101.合起来就是:109110101.转化为二进制就是:01101101 0110 1110 0110 0101。将它们分成六个字为一段:011011010110 111001 100101。而他们对应的十进制字符分别是:2722 57 37。Base64等价值就是:27、b,22、w,57、5,37、1,也就是说mne的Base64编码是bw51。

需要注意的是:如果被加密的字符串每3个一组,还剩1或2个字符,使用特殊字符“=”补齐Base64成为4个字。

知道了加密方式,要逆向就很简单了。将对应的Base64值转换为十进制,再通过计算转换成二进制编码。将这一串码分为8位1组,得到十进制码,最后再等价到相应的ASCII编码即可。

附1:ASCII编码表(部分)

二进制

十进制

十六进制

缩写/字符

解释

00000000

0

00

NUL(null)

空字符

00000001

1

01

SOH(start of handing)

标题开始

00000010

2

02

STX(start of text)

正文开始 

00000011

3

03

ETX(end of text)

正文结束

00000100

4

04

EOT(end of transmission)

传输结束

00000101

5

05

ENQ(enquiry)

请求

00000110

6

06

ACK(acknowledge)

收到通知

00000111

7

07

BEL(bell)

响铃

00001000

8

08

BS(backspace)

退格

00001001

9

09

HT(horizontal tab)

水平制表符

00001010

10

0A

LF(NL line feed, new line)

换行键

00001011

11

0B

VT(vertical tab)

垂直制表符

00001100

12

0C

FF(NP form feed, new page)

换页键

00001101

13

0D

CR(carriage return)

回车键

00001110

14

0E

SO(shift out)

不用切换

00001111

15

0F

SI(shift in)

启用切换

00010000

16

10

DLE(data link escape)

数据链路转义

00010001

17

11

DC1(device control 1)

设备控制1

00010010

18

12

DC2(device control 2)

设备控制2

00010011

19

13

DC3(device control 3)

设备控制3

00010100

20

14

DC4(device control 4)

设备控制4

00010101

21

15

NAK(negative acknowledge)

拒绝接收

00010110

22

16

SYN(synchronous idle)

同步空闲

00010111

23

17

ETB(end of trans. block)

传输块结束

00011000

24

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。