MD系列算法是信息摘要三大算法中的一种,全称:Message Digest算法,按照规范版本分为MD2、MD4、MD5三种算法,目前最常用的是MD5版本算法。

1、MD2算法

1989年,是由著名的非对称算法RSA发明人之一--麻省理工学院教授罗纳德-里维斯特开发的;这个算法首先对信息进行数据补位,使信息的字节长度是16的倍数,再以16位的检验和作为补充信息追加到原信息的末尾。最后根据这个新产生的信息计算出一个128位的散列值,MD2算法由此诞生。

2、MD4算法

1990年,在MD2基础上发展出MD4算法,1991年,MD4的创始人开发出

MD5算法:

(1)和MD2一样,仍然对信息进行补位,但是补位时要添加448个字节, 变为512的倍数。

(2)仍对信息做散列,获取一个128位的散列值,得出MD4值。

MD4的算法影响很大,比如MD5、SHA-1、Ripe-MD系列都是从MD4基础上衍生出来的。

3、MD5算法

(1)MD5的特点

长度固定:不管多长的字符串,加密后长度都是一样长。 

作用:方便平时信息的统计和管理。

详解:经过MD5加密生成一个固定长度为128bit的串。因为128位0 和1的二进制串表达不友好,因此转化为了16进制,128/4 = 32位的 16进制。将32位去掉前8位和后8位得到的是16位。因此会有MD5的 32位 和16位加密说法。

(2)易计算

字符串和文件加密的过程是容易的。

作用:开发者很容易理解和做出加密工具。

(3)细微性

一个文件,不管多大,小到几k,大到几G,你只要改变里面某个字符,那么 都会导致MD5值改变。

作用:很多软件和应用在网站提供下载资源,其中包含了对文件的MD5码, 用户下载后只需要用工具测一下下载好的文件,通过对比就知道该文件是 否有过更改变动。

(4)不可逆性

你明明知道密文和加密方式,你却无法反向计算出原密码。

作用:基于这个特点,很多安全的加密方式都是用到,大大提高了数据的 安全性。

不可逆的原因:摘要是部分内容,因此由MD5的密文和加密方式会得 到很多明文,而无法确定明文。

一个原始数据,只对应一个md5值;但是一个md5值,可能对应多个原始数据。

补充:MD5常用于字符串和文件的加密。

4、MD5撞库

关于撞库破解:这是概率极低的破解方法,原理就是:

(1)建立一个大型的数据库,把日常的各个语句,通过MD5加密成为密文, 不断的积累大量的句子,放在一个庞大的数据库里。

(2)比如一个人拿到了别人的密文,想去查询真实的密码,就需要那这个 密文去到提供这个数据库的公司网站去查询。

这就是撞库的概念。

5、关于MD5加盐

比如我的银行密码是"12345"

(1)得到的MD5是:827ccb0eea8a706c4c34a16891f84e7b

(2)一个人截取到这个密文,那么通过撞库肯定容易撞出12345.

(3)我们要做的就是加盐,银行密码还是"12345",然后我把银行密码加 上我特定的字符串才计算MD5。 

所以密码还是那个密码,但是变成求"12345密码加密987"的MD5值,然后 再得到MD5,那么这个MD5起码可以确认那个数据库不会有。

6、在Eclipse中分析MD5算法

先分析MD5返回16位长度算法:

MD系列算法

MD系列算法

开始分析MD532方法,这里唯一其他代码都是一样的, 唯一的区别是最 后的返回没有进行截取,而是全部转换。
补充:协议分析如何找MD5算法?degist()方法、update()这些固定方 法。

小结:

1、介绍MD5算法的相关概念了以及特点。

2、分析MD5算法代码的实现。