核心特性#
MD5 核心特性:
- 压缩性:无论明文长度是多少,输出的 MD5 值长度永远固定(32 位十六进制字符串)
- 不可逆性:可以通过明文算出 MD5,但是无法从 MD5 反向推导出明文
- 抗碰撞性:不同的明文生成的 MD5 绝不相同。只要是原始数据改动了一个字节,生成的 MD5 就会天差地别(雪崩效应)
应用场景#
在「苍穹外卖」中,MD5 主要用于保护密码安全:
-
用户注册/新增员工:
- 将前端传过来的明文密码,经过 MD5 加密后再存储到数据库
-
用户登陆
-
将前端传过来的明文密码进行 MD5 加密
-
将加密后的结果与数据库对比
-
缺陷#
单纯的MD5 已经不再安全,虽然其不可逆,但是黑客可以使用 彩虹表进行暴力碰撞。
- 彩虹表:预先计算好常见密码的 MD5 值并存成一张大表
- 拿到数据库里的 MD5 后,通过查表就可以反推出明文(利用「抗碰撞性」)
优化#
为了破解彩虹表,可以给密码“加盐”:
- 用户密码是
123456。 - 系统随机生成一个字符串(盐值,比如
&*%#_!22)。 - 对
123456 + &*%#_!22的组合进行 MD5 加密。 - 即使两个用户的密码都是
123456,因为盐值不同,数据库里的乱码也完全不同。这让彩虹表彻底失效