很多朋友并不是很了解md5是什么,针对这个问题,我们这边做一下简单的介绍。
MD5是什么?
MD5是一种信息摘要算法,它可以从一个字符串或一个文件中按照一定的规则生成一个特殊的字符串(这个特殊的字符串就被称之为摘要,我理解就是从文件中摘一些信息片段加工而来),并且一个文件所对应的MD5摘要是固定的,当文件内容变化后,其MD5值也会不一样(虽然理论上来说也有可能会一样,但概率极小),因此,在应用中经常使用MD5值来验证一段数据有没有被篡改。
比如,在数据的发送方将原始数据生成出MD5值,然后把原始数据连同其MD5值一起传给接收方,接收该收到数据后,先将原始数据用MD5算法生成摘要信息,然后再将此摘要信息与发送方发过来的摘要信息进行比较,如果一致就认为原始数据没有被修改,否则原始数据就是被修改过了。
MD5算法具有以下特点:
压缩性
任意长度的数据,算出的MD5值长度都是固定的。
容易计算
从原数据计算出MD5值很容易。
抗修改性
对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
强抗碰撞
已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
不可逆
也就是说如果告诉你一个MD5值,你是无法通过它还原出它的原始数据的,这不是你的技术不够牛,这是由它的算法所决定的。因为根据4点,一个给定的MD5值是可能对应多个原始数据的,并且理论上讲是可以对应无限多个原始数据,所有无法确定到底是由哪个原始数据产生的。
MD5常见使用场景
常常在某些软件下载站点的某软件信息中看到其md5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows md5 Check等)做一次md5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用md5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。
MD5发展史
1991年,Rivest开发出技术上更为趋近成熟的md5算法。
它在MD4的基础上增加了"安全-带子"(safety-belts)的概念。虽然md5比MD4复杂度大一些,但却更为安全。
这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在md5算法中,信息-摘要的大小和填充的必要条件与MD4完全相同。
Den boer和Bosselaers曾发现md5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。