密码与哈希:存储、验证与算法选型

MD5 为什么不能存密码、bcrypt 与 SHA-256 各适合什么场景,以及如何用 Towalles 工具安全地做本地验证与学习。

· 全部指南

哈希 ≠ 加密

哈希是单向摘要:相同输入得到相同输出,无法从摘要反推原文。加密是可逆的(有密钥就能解密)。密码存储必须用单向哈希 + 盐(salt)+ 慢哈希算法,绝不能加密后存库——密钥一旦泄露,全部密码裸奔。hash-generator 适合理解 MD5、SHA-256 等摘要算法的行为,但不应用于密码存储。

SHA-256 适合文件校验、区块链、API 签名等完整性场景——需要快速、确定性输出。密码场景需要故意「慢」:bcrypt、scrypt、Argon2 通过 cost factor 抵御暴力破解。Towalles bcrypt 工具演示 rounds 与 hash 格式,仅供学习参数含义,生产环境在服务端用成熟库生成。

密码策略与生成

强密码不等于复杂规则堆砌。NIST 现代建议:长度优先(12 位以上)、检查泄露密码库(Have I Been Pwned)、避免定期强制改密导致用户写便签。password-generator 可生成随机口令;password-strength 评估熵与常见弱模式,适合团队培训,不要收集员工真实密码做测试。

多因素认证(MFA)比单纯加长密码更有效。工具站无法替代身份提供商——OAuth、WebAuthn、TOTP 应在你的应用架构中实现。本地 generator 适合创建测试账号密码,部署前务必替换为密钥管理系统或环境变量注入的凭据。

API 签名与 HMAC

Webhook 与开放 API 常用 HMAC-SHA256 验证请求体未被篡改:服务端与客户端共享 secret,对 canonical 字符串计算 MAC 并比对。这与密码哈希不同——HMAC 需要密钥,且要防 timing attack(使用恒定时间比较)。hmac-generator 适合本地复现文档示例,验证你的实现与官方 SDK 输出一致。

生产 secret 不要粘贴到任何在线工具(包括 Towalles)。用脱敏样本或轮换后的旧密钥做联调。hash-generator 与 hmac-generator 组合使用,可理清「摘要」「带密钥的摘要」「JWT 签名」三者的边界——这是后端面试与代码审查的高频考点。

算法用于存储,不是替代传输加密

TLS 保护传输中的密码;密码哈希保护静态存储。使用慢速、占内存的 KDF(bcrypt/scrypt/Argon2)并唯一盐。不要存 SHA-256(password) 或 Base64(password)——前者易暴破,后者可逆。

升级参数不锁死用户

升级哈希参数时:登录验证旧哈希,再按新参数重哈希并写回。存储串加版本前缀,便于选择校验算法。

Towalles 工具边界

password-strength 用于策略教育;bcrypt 相关工具演示 cost;hash-generator 用于完整性摘要——不是密码存储。培训只用合成样本,勿粘贴真实用户密码。

哈希不是加密

密码哈希应慢、加盐、单向(bcrypt/scrypt/argon2 等)。原始 SHA-256 这类快摘要用于完整性,不用于存密码。生产环境不要自造方案。

迁移

登录时校验旧哈希并签发新哈希。把成本参数写在使用它的代码旁。

本地工具

强度检测用于教育用户,不负责存密码。即便是本地工具,直播演示也不要粘贴真实生产密码。

Pepper 与 salt

salt 按密码生成并与哈希一起存;pepper 是应用级密钥。若使用 pepper,按服务端密钥保管——不要只放在数据库行里。

密码哈希迁移

动生产前先写操作程序:输入、期望输出、负责人与回滚。Towalles 上的工具便于本地检查样例,不能替代变更控制。

前置条件

  • 有代表失败案例的脱敏 fixture。
  • 清楚谁是真相来源(应用、网关、CMS 或网络设备)。
  • 能在非生产环境或用合成数据复现问题。

步骤

  1. 用 fixture 复现,记录精确命令或 UI 路径。
  2. 按需用格式化、哈希或解析工具与已知正确样例对照。
  3. 做最小修复;同一变更里避免顺手重构。
  4. 补充回归测试或清单项,避免下一任 on-call 重复踩坑。
  5. 更新 runbook:症状 → 检查 → 修复。

善后

观察 24–72 小时错误率与支持工单。若做过一次性数据修复,安排后续防止复发。工单里保留截图与哈希,不要留真实密钥。

反模式

  • 把生产密钥贴到公开页面「只是看一下」。
  • 上线却不写回滚说明。
  • 把本地绿色演示当成多区域生产的证明。

相关工具