在软件开发中,用户口令的保护是安全防线的第一道关口。直接将用户口令明文存储是极其低级且危险的行为,一旦数据库泄露,将导致灾难性后果。因此,我们必须对口令进行不可逆的加密处理,而这个过程远非调用一个简单的MD5或SHA哈希函数那么简单。
一、为何传统哈希已不再安全?
早期,开发者使用如MD5、SHA-1等哈希算法来处理口令。其原理是:存储 Hash(Password) 而非口令本身。然而,这种方式存在致命缺陷:
- 彩虹表攻击:攻击者预先计算海量常用口令的哈希值,形成一张巨大的“彩虹表”。通过对比数据库泄露的哈希值,可瞬间反查出原始口令。
- 暴力破解:现代GPU运算能力极强,可以每秒尝试数十亿次哈希计算。对于短口令或简单口令,即使没有彩虹表,暴力破解也易如反掌。
为了对抗这些攻击,“加盐”(Salt)的概念被引入。
二、核心防御机制:加盐与慢哈希
- 盐(Salt):一个随机生成的、足够长的(例如16字节)字节序列。它为每个用户的每次注册生成一个独一无二的随机值,与口令拼接后再进行哈希:
存储格式 = Salt + Hash(Salt + Password)。
-
- 作用:彻底摧毁彩虹表的有效性。攻击者必须为每个盐值单独预计算一张彩虹表,成本变得不可接受。
- 慢哈希(Key Stretching):传统哈希算法设计初衷是快,但这恰恰有利于攻击者。我们需要的是慢算法。通过引入迭代次数(work factor)参数,故意增加计算哈希的
Java口令加密最佳实践指南

最低0.47元/天 解锁文章
2210

被折叠的 条评论
为什么被折叠?



