一、MD5概述
MD5:英文全称是 Message-Digest Algorithm 5。
中文名为 消息摘要算法第五版。它是消息摘要算法,属于 Hash 算法的一种。
正常情况下,它的结果是一个 长度为 32位 的 16进制 的 字符串。
也有一些地方会用到 16 位的 MD5的结果,它实际上是从 32位 字符串中取中间的第9位到第24位的部分,即长度是 16位。
二、MD5的主要特点
- 不可逆,相同的数据的MD5值肯定一样,不同数据的MD5值不一样(理论上可能会有相同的,这个是学习的越深就越清楚)。
一个MD5理论上的确是可能对应无数多个原文的,因为MD5是有限多个的而原文是可以有无数多个的。比如主流使用的MD5将任意长度的字符串映射为一个128bit(16 * 8)的大整数。也就是一共有 2的128次方种可能,大概是 3.14*10的38次方,这个数字是有限的,但是世界上可以被用来加密的原文则有无数的可能性
三、MD5的性质
- 压缩性:任意长度的数据,算出的MD5值长度都是固定的(相当于超损压缩)。
- 抗修改性:对原数据进行任何改动,哪怕是只修改1个字节,所得到的MD5值都会天差地别。
- 容易计算:从原数据计算出MD5值很容易就可以计算出来。
- 弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。注意这里是非常困难,并不是一定找不到。
- 强抗碰撞性,想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。注意这里是非常困难,并不是一定找不到。
四、MD5破解
MD5有不可逆的特点,但是不可逆,并是代表不能破解。
某些MD5破解网站,专门用来查询MD5码,原理是它通过把常用的密码先进行MD5处理,然后将数据存储起来,然后再跟需要查询的MD5结果匹配,这时就有可能通过匹配的MD5值得到明文数据,所以有些简单的MD5码是可能反查到加密前的明文的。
五、MD5防破解
- 多重加密
所谓多重加密,其实 就是把要加密的原文加密成MD5密文,然后再一次将MD5密文加密成MD5密文,多试几次,一般3次以上,上线破解的网站就匹配不上了。记住:匹配不上,不一定就是足够安全哦,只是不容易被轻易破解了(因为第二次要破解的原文是一个32位的16进制的字符串,以此类推),增加了破解的时间成本而已。
- 加盐加密
比如在Java语言中的 Md5Crypt.apr1Crypt(“要加密的密文”, “自定义盐值”), 可以多重使用,自行定义哈。
六、MD5的用途
这个一定要知道哈。
- 密码存储
处于安全考虑,所有的原生密码不能直接存储到数据库中,以防数据泄露导致许多问题出现,因此,会将明文密码经过MD5加密后存储到数据库中。
- 一致性校验
下载文件的校验码,比如双方约定的字符串或者文件,发送方可提供文件的同时,也提供MD5结果,用于接收方接收后对文件重新 MD5得出结果做对比,就知道文件是否下载完整,或者传输过程中有无被篡改等。
本文完结!