欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

密码学哈希:SHA-256 与 bcrypt 在密码存储中的取舍

发表于:|最后更新:|分类:安全与运维|阅读:1588 次

密码存储的核心目标是抵抗离线暴力破解与彩虹表攻击。普通哈希函数(如 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 等弱哈希存储密码