You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP和MySQL在数据库中安全存储密码?

数据库密码安全存储的最佳实践与推荐算法

核心原则:永远不要存储明文密码

明文存储密码一旦数据库泄露,所有用户账号都会直接暴露风险,必须用**单向哈希(不可逆)**的方式处理密码后再存储。

最佳存储方式

  • 必须使用带随机盐值(Salt)的哈希算法
    • 盐值是随机生成的一串字符串,和密码拼接后再哈希,避免相同密码生成相同哈希值,防止彩虹表攻击
    • 每个用户的盐值要独立存储(和哈希后的密码存在同一条用户记录里即可)
  • 选用慢哈希算法
    • 不同于MD5、SHA-1这类快速哈希,慢哈希算法故意设计成计算耗时的,大幅增加暴力破解的成本
  • 不要自己实现加密逻辑
    • 直接使用语言或框架自带的成熟密码哈希库,避免手动实现出现安全漏洞

推荐的最优加密算法

  • Argon2:目前密码哈希的标准,是2015年Password Hashing Competition的获胜者,能自适应调整内存、CPU和时间开销,抵御各类硬件加速的破解攻击,优先推荐
  • bcrypt:经过多年验证的经典算法,基于Blowfish加密算法,支持调整计算成本(work factor),兼容性好,适合大多数场景
  • PBKDF2:由NIST推荐的算法,通过多次迭代哈希来增加破解难度,在一些旧系统中依然广泛使用,安全性也有保障

示例(以Python为例)

使用passlib库处理Argon2哈希:

from passlib.context import CryptContext

pwd_context = CryptContext(schemes=["argon2"], deprecated="auto")

# 生成哈希密码(自动生成盐值)
hashed_password = pwd_context.hash("user_input_password")

# 验证密码
is_valid = pwd_context.verify("user_input_password", hashed_password)

额外注意事项

  • 不要对哈希后的密码再进行加密(比如AES对称加密),单向哈希已经足够,加密反而可能引入额外风险
  • 定期更新哈希算法的参数(比如增加work factor),随着硬件性能提升,调整计算成本来保持破解难度
  • 禁止将密码的哈希值作为用户的找回凭证,密码找回流程要通过独立的验证渠道(比如邮箱、短信验证码)

内容的提问来源于stack exchange,提问作者Sathiskumar S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:40:08