介绍:
MD5计算,对原始消息(Message)做有损的压缩计算,无论消息长度是多少字节都会生成一个固定长度(128位/16字节)的消息摘要。是一种HASH函数。
特性
- 单向性: 当你知道这个原始消息,算法是MD5且迭代次数时,你就可以得到一模一样的信息摘要。
- 不可预测性:两个完全不相干的消息,通过MD5转化后有可能变成一样的摘要。
- 恒定性: 原始消息只要通过MD5加密后,得到的消息体一定是一致的(相同迭代次数下)
- 不可逆:MD5是一种散列函数,使用的是hash算法,在计算过程中原始消部分信息是丢失了的。MD5是有穷的(128位),而数据是无穷的。
应用
数据完整性校验、数字签名、文件完整性检查、密码保存等等
以密码保存为例
使用明文肯定是不安全的,当通过md5加密之后进行存储就安全了很多。前面说到的这种加密方式不可逆,但是由于密码一般有位数限制所以通过彩虹表也是可以进行破解的。(彩虹表:简单说就是穷举可能的密码组合,将每个可能性组合的md5 hash散列存入数据库。形成个巨大的表)
或者我们可以对md5进行n次迭代加密,但是这种也还是可以进行大量计算来破解,对我们也有资源浪费。
那么如何解决呢,我们可以通过加盐的方式,将每个用户独有的信息加上密码进行md5加密。这样就不发从市面上已有的彩虹表中进行破解。
注:查资料时好多标题都是王小云教授已经破解了MD5,but事实是这样的,她的研究成果如下,并不是网络标题上的内中所谓的破解。
MD5(x) = MD5(y)
及x、y两个原信息对应同一个加密后的信息摘要,这样的话我们传递消息即使通过md5校验但是内容也是已经被篡改的了。
网友评论