密码存储的核心目标是抵抗离线暴力破解与彩虹表攻击。普通哈希函数(如 SHA-256)计算过快,不适合直接存储密码。
一、为什么 SHA-256 不安全
现代 GPU 每秒可计算数十亿次 SHA-256,攻击者可在短时间内穷举常见密码字典。
二、bcrypt 的自适应成本
python
import bcrypt
hashed = bcrypt.hashpw(b"password", bcrypt.gensalt(rounds=12))
assert bcrypt.checkpw(b"password", hashed)bcrypt 内置盐值(Salt)并支持可调成本因子(rounds),随硬件性能提升可增大成本,使暴力破解始终保持在可接受的时间成本之上。
三、推荐方案
- 优先使用 Argon2id(抗 GPU 与侧信道)
- 次选 bcrypt 或 scrypt
- 禁用 MD5、SHA-1 等弱哈希存储密码