MD5算法为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。用于确保信息传输完整一致,是计算机广泛使用的杂凑算法之一。

MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

根据以上特点衍生出来可以供我们使用的特性:
方便存储:MD5加密出来都是32位的字符串,能够给定固定大小的空间存储,传输,验证
文件加密:MD5算法运用在文件加密上很有优势,应为只需要32为字符串就能对一个巨大的文件进行验证完整性
不 可 逆:MD5加密出来只会截取末尾32位,具有良好的安全性,如果是对于参数加密很难伪造MD5
加密损耗低:MD5算法加密对于性能的消耗微乎其微(我获得的结果是:0。001毫秒)

MD5算法的实际应用
用户密码
对于用户密码加密最高境界就是:别人获得你数据库的用户资料别人也没有办法获知密码。要达到就要有一套复杂的加密规则,一般常用的规则比如:MD5(MD5(用户名+用户密码)+MD5(KEY+项目名+公司名)) 这样可以避免和别人碰库不排除别人用MD5算法来攻击你的服务器来匹配。当然还可以自定很多种加密方法,就算知道加密方法也几乎无法去推送出用户原密码是什么。

请求参数校验
对于服务器来言排除系统问题最大的问题就是害怕请求被拦截,拦截修改之后就有很多漏洞的可能性了。为了避免被拦截,参数被修改这种文件的常用方法就是对请求参数进行校验,就算拦截了请求参数修改了只要模拟不出MD5加密出来的值,在服务器过滤器直接就会进行拦截。

文件校验
对于一些图片已经一些很小很小的文件来说可以不用MD5算法校验应为基本上都是一次请求就完成了上传,而且显示的时候也不需要验证图片完不整。如果有一个5MB的文件 客户端把它分割成5份1MB的文件在上传的时候上传两个MD5值一个是当前上传的片1MB文件流的MD5,还有一个就是拼接之后的MD5通过这样的方式能保证文件的完整性。