密码生成与哈希计算完整指南
随机密码该多长?MD5 还安全吗?本指南讲清楚密码学安全随机数、密码强度、哈希函数选型。
本指南讲清楚两个相关但不同的话题:1)如何生成强随机密码,2)哈希函数怎么选。两者都涉及密码学安全随机和编码原理。
强密码的三个维度
- 长度:12 位起步,重要账号 16+ 位
- 字符集:大小写 + 数字 + 符号(4 类全勾选最强)
- 不可预测:用 crypto.getRandomValues,不要 Math.random
本工具默认 16 位 + 大小写 + 数字,可勾选符号与排除易混字符(0/O/l/1)。
密码熵的计算
熵 = log₂(字符集大小^密码长度)
- 8 位纯数字:log₂(10^8) ≈ 27 bits(弱)
- 12 位字母数字:log₂(62^12) ≈ 71 bits(中)
- 16 位含符号:log₂(94^16) ≈ 105 bits(强)
经验法则:60 bits 一般用,80 bits+ 重要账号。
哈希函数选型
- MD5:1992 年算法,已被破解。仅用于完整性校验,不要用于密码存储
- SHA-1:2017 年被 Google 破解。同上
- SHA-256/512:当前安全。文件校验、签名首选
- bcrypt / Argon2:专门为密码存储设计,慢哈希 + 加盐
关键:网站存用户密码必须用 bcrypt/Argon2,不能用 SHA-256(被彩虹表攻击)。本工具的 SHA 系列适合校验场景。
使用 Web Crypto API
本工具的 SHA 全部走 crypto.subtle.digest(Web Crypto API):
- 浏览器原生,性能比纯 JS 快 10-100x
- 经过审计,安全可信
- 同样用于 HTTPS 证书验证
MD5 因 Web Crypto 不支持(已被认为不安全),用纯 JS 实现兜底。
密码管理实战
- 不要重复用密码:每个网站独立
- 密码管理器:1Password / Bitwarden / iCloud Keychain,自动生成+保存
- 二步验证:开启 TOTP(Google Authenticator)或硬件密钥(YubiKey)
- 泄露排查:定期在 haveibeenpwned.com 查询邮箱是否在数据泄露中
常见问题
crypto.getRandomValues 真的安全吗?
是。它使用操作系统的密码学安全随机源,可用于生成密钥、token、密码。
MD5 现在还能用吗?
可用于非安全场景(文件校验完整性、缓存 key 哈希)。**不要**用于密码存储、数字签名、防篡改。
SHA-256 和 SHA-512 哪个好?
一般场景 SHA-256 足够。SHA-512 在 64 位 CPU 上更快但输出更长。