MD5数字摘要
MD5是一个哈希算法。不可逆的加密算法。
- 从一段明文可生成一段固定长度格式的密文。
- 一段不变的明文生成的密文是不变的。
- 从密文中无法直接反推出明文。(可以从已经泄露的明文中,间接推导明文)
加盐
由于 MD5 等哈希算法有一个特性:一段不变的明文生成的密文是不可变的,由此带来一个问题,请看下面的案例:
人员 | 明文密码 | MD5加密后(示意) |
---|---|---|
A | 123456 | aaaaa |
B | 123456 | aaaaa |
假设B原本不知道A的原始明文密码,但是B入侵后台数据库,从中看到A经过MD5加密的密码,他就可以推断出A的明文密码,继而破解A的其他网站所有使用该明文密码的账户。
为了应对这个问题,我们使用加盐
。这是一个计算机领域的术语。
在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐
我的理解是:每个人加盐的量都是不同的,只要每个人的盐值不一样,那么就不会有相同的MD5哈希值。而且加盐还有加佐料的含义,将原本的数据给修饰了。
人员 | 明文密码 | 盐(示意) | 加盐后 | MD5加密后(示意) |
---|---|---|---|---|
A | 123456 | a | 123456a | aabba |
B | 123456 | b | 123456b | ababa |
这时候,B入侵数据库,他无法推测出A的明文密码。
最佳实践
前端将密码MD5加密,然后传给后端,后端对其加盐加密。