在之前的文章中,我们聊了不少的加密算法,今天我们聊一种被广泛使用的密码散列函数——MD5。
MD5又叫MD5信息摘要算法,经常用于确保信息传输的完整性和一致性 。从严格意义上来说,MD5并不是加密算法,只能是一种哈希算法或是叫做摘要算法。MD5算法对比普通的加密算法缺少了解密的过程,它无法从密文(散列值)反过来得到原文。
MD5应用场景
- 用户密码保护
在保存用户密码时,不记录密码本身,只记录密码的MD5结果(即使数据库被盗也无法反推出明文)。
- 文件完整性校验
先在发送端计算一次文件的MD5,并把结果发送给接收端,接收端在接受文件后也计算一次MD5,两次结果一致文件完整。
- 垃圾邮件筛选
在电子邮件使用越来越普遍的情况下,可以利用 MD5 算法在邮件接收服务器上进行垃圾邮件的筛选,以减少此类邮件的干扰。
- 数字签名
发布程序时同时发布其MD5,下载后比较MD5是否相同,就可知道程序是否被篡改。
MD5算法原理
MG5以512位分组来处理输入的信息,每一分组又被划分为16个32位子分组。经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
在MD5算法中,首先需要对信息进行填充,填充方法如下:先在信息后面填充一个1,之后就是无数个0,直到使其字节长度对512求余数的结果等于448,即(n*512) + 448 ,为什么要使余数为448呢,因为剩下的512-448 等于64位 是用于表示填充前的信息长度。加上剩下的64位,即(n+1)*512,长度刚刚好是512的整数倍数。
然后就与链接变量进行循环运算,得出结果。MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,它们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。当设置好这四个链接变量后,就开始进入算法的四轮循环运算。
MD5的特点
- 压缩性:无论数据长度是多少,计算出来的MD5值长度相同。
- 容易计算性:由原数据容易计算出MD5值。
- 抗修改性:即便修改一个字节,计算出来的MD5值也会巨大差异。
- 抗碰撞性:知道数据和MD5值,很小概率找到相同MD5值相同的原数据。
MD5虽然理论上不可逆,但还是可以通过“查字典”的方式获取MD5原文信息,并且因为MD5的碰撞性,决定了存在两个不同的输入信息,其MD5相同的可能,因此不适用于安全性认证。
免责声明:素材源于网络,如有侵权,请联系删稿。