首页 / 指南 / 密码存储 — 用盐值·bcrypt·Argon2 安全保存

若以明文存储密码,一旦数据库泄露,所有账户便会立即暴露。因此密码应转换为 哈希 后存储,登录时比对输入值的哈希。由于不保存原文,即使泄露也无法立即得知密码。

但仅靠简单的 SHA-256 哈希还不够。由于相同的密码总是得到相同的哈希,攻击者可以用预先计算好常见密码哈希的 彩虹表 进行大规模比对。要防止这一点,必须为每个账户加上随机值 (salt)后再哈希。

速度也是问题。SHA-256 极快,攻击者每秒可猜测数十亿次。因此密码应使用有意设计得较慢的 bcrypt·scrypt·Argon2 等专用哈希。它们可调节迭代次数与内存开销,从而大幅减缓暴力破解。

总结而言,密码存储的三大原则是 盐值 + 慢速专用哈希 + 足够的开销参数。普通的 SHA-256/512 适用于文件完整性与签名,但密码存储请使用 Argon2 这类专用算法。

用此算法计算哈希