MD5

SongLynn 2019-09-05

1. MD5的介绍

  • MD5,即Message Digest Algorithm 5 ,中文名为消息摘要算法第五版。
  • MD5,这是一个在计算机安全领域广泛使用的一种散列函数,用于提供消息的完整性保护。

2. 普通的Hash算法加密的特点:单一值或者不可逆

x --> (2x+3) --> y (单一hash值,没有冲突,可逆)
x --> (x%7+2) --> y (不可逆,但是伴随着冲突)

3. MD5的特点(与2可以进行对比)

  • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  • 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(伪造数据)是非常困难的,即不可逆。
  • 压缩性:任意长度的数据,算出的MD5值长度都是固定的,即128bit。
  • 容易计算:从原数据计算出MD5值很容易。

4. MD5的常见应用

  • MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式,即把一个任意长度的字节串变换成一定长的十六进制数字串。
  • MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。

5. 存在问题分析

  • MD5的破译:难度极大
  • MD5的字典:可通过加盐来解决

6. MD5的加盐

  • 如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典,例如MD5密码破解网站,得到某用户的密码。
  • 加Salt可以一定程度上解决这一问题。
  • 所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。
  • 这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了,密码和salt值都得和黑客使用的一样才行。

7. 入门案例

7.1 需求

输入密码,返回一个表示MD5值的字符串

7.2 分析

1. 获取Java语言提供的MD5算法类
2. 传入密码,返回一个表示MD5值字节数组(16字节)
3. 对结果进行处理: 将MD5值(16个字节的字节数组)还原成字符串

7.4 总结

7.4 总结

  • 为何MD5散列算法可以被当做加密算法?其基本想法是这样的:

    • 当用户首次提供密码时(通常是注册时),由系统根据密码计算MD5散列值。
    • 而当用户登录时,系统为用户提供的密码求散列,再比较散列值,如果两者一样,则表示密码正确。

相关推荐