MD5初探及简单应用

来源:互联网 发布:华为查看mac表ip 编辑:程序博客网 时间:2024/05/16 17:00

信息安全的一次小作业,图片都没有了,不影响阅读,欢迎讨论


MD5初探及简单应用

 

 

引题:

1.

做一个简单的登录功能,用户名和密码存到数据库去验证,现在的情况是,数据库存的是明文,如果有人获得这个明文,就可以登录账户,希望可以解决这个问题。

2.

网站经常说:我们不会保存您的密码,请放心,那么问题来了,不保存密码他怎么验证呢?

 

一、MD5是什么:

Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)

消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当巨大,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的。近年来,随着计算机性能的飞速改善,加密速度不再成为限制这种加密技术发展的桎梏,因而消息摘要算法应用的领域不断增加。

 

 

我理解的MD5就是可以把任意长字符串经过一系列计算,算出一个32位长的16进制数字。比如:

 

或者

 

二、MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

 

 

解决方案:

后台不存密码只存MD5!这样拿到MD5也拿不到密码原文,所以引题的两个问题可以解决,但是:

 

因为MD是一个数字,而且是一个有限数,所以MD5是有可能重复的。也就是两个字符串产生的MD5值是一样的。

因此找到和数据库中MD5一样的字符串,就可以登录系统了。关键问题是多久能找到:

计算步骤:

1、MD5是一个32位长的16进制数字,所以MD5加密后可能产生16的32次方这么大的数字,这是多大的数字呢?

 

9位是一亿6+9+9是1.2十万亿亿次,所以MD5一共这么多个不同的数字,如果用计算机破解需要多久?

 

千万亿是8+9,天河二号最短需要10的17次方秒可以

 

就算10的9次方秒,天河二号找到相同的MD5的字符串需要10的8次方年需要一千万年

所以解决方案中大可放心的存MD5了。

 

 

二、MD5破解

 

MD5破解1.知道原文的破解

先说MD5的另一个用途

MD的另一个重要用途是数字签名,比如:

 

下载Eclipse时候提供MD验证,以防止软件被篡改,但是有传言MD5已经被破解,来看下破解MD5是个什么意思:

从根本上讲,MD5算法是一种摘要算法,它可以从多个字节组成的串中计算出由32个字节构成的“特征串”。对于超过32字节的串来说,MD5计算得出的值必然是其一个子集,所以必然存在两个(或更多)不同的串能够得出相同MD5值的情况。这种情况就叫做MD5碰撞。

王小云教授的贡献在于她找到了一种方法,可以在已知原文的情况下构造出另一个跟原文MD5值相同的串。并且该计算过程所消耗的时间是有限的、可计算的。
从这一点来说,MD5方法确实已经不可靠了。但是,要利用此方法达成某种目的依然是困难无比的。原因就是你无法确定新构造出来的串符合你的预期。这么说比较绕口,说得俗一点:你可以将某个文件的MD5值弄的跟Word.exe的完全一样。但是你却无法让这个文件包含你所希望的某种功能。这个文件刚好可以运行的概率都非常低。
确实有人发布了例证:程序A跟程序B的MD5值完全相同,但运行结果却是完全不同。这种情况只能发生在程序A和程序B都被蓄意的填充了很多无关字符,“凑成”了相同的MD5。其实并无实用意义的。

概率学指出,几率无限小的可能性可以认为不可能。
如果不使用王教授的方法,依靠自然巧合发生两个文件MD5完全一致的可能性是及其微小的。微小到与在一个沙漠中找到完全相同的两粒沙子的概率接近。因此,对于一般用途的文件MD5是完全可用的。只是在一些高度机密,并且未使用或无法使用其他安全措施的情况下才需要回避MD5。

 

结论:一般需求下使用数字签名使用MD5还是比较安全的。

 

再论我们的话题,数据库存密码的MD5

 

MD5破解2.知道MD5破解密码

与破解一是两个概念。上一个是伪造软件,这一个是窃取密码

 

MD5破解网站

http://www.cmd5.com/

http://pmd5.com/#

 

1.纯数字很容易破解,8位以下

 

 

 

2.10位数字

 

 

 

2.字母简单组合

 

 

 

6位字母组合

 

 

 

3.大小写和数字组合

6

 

 

 

 

结论:采用强制密码是大写字母+小写字母+数字的组合,要求数位在6-12位,安全系数高很多,被破解的概率极低。

 

破解网站的原理:采用查字典的方式破解,字典里是常用密码组合:

纯数字8位以下

字母组合6位以下

字母数字组合6位以下

对于大写字母,小写字母,数字混合组合很难破解

 

三、MD5的应用:

 

1.java实现MD5

 

2.登录系统实现MD5的方案

设定密码时:

必须使用大写字母+小写字母+数字的组合,要求数位在6-12位,不符合要求,重新输入,

符合要求后,将密码转化为MD5,存到数据库

输入密码时:

如果拿到用户密码的MD5值,采用暴力破解可以找到匹配的MD5值一样的字符串,但不一定是和用户密码一致的字符串,所以增加以下验证:

先验证输入的字符串是否为6-12位,是否包括大写字母+小写字母+数字,如果不包括,要求重新输入

 

测试:

1.添加用户界面

a) 密码输入不是大写字母加小写字母加数字

b) 密码不够6

c) 密码超过12

d) 用MD5

e) 不用MD5

2.登录页面

f) 密码输入不是大写字母加小写字母加数字

g) 密码不够6

h) 密码超过12

i) 用MD5登录

j) 不用MD5登录

 

这个界面的全部代码贴到下一个博客

 


0 0
原创粉丝点击