密码哈希解码器
密码哈希使用带盐值和可配置工作因子的单向函数安全地存储凭证。此工具自动检测并解析模块化加密格式(MCF)、PHC 字符串格式和 LDAP 方案的哈希,显示算法、参数、盐值、哈希输出和安全评估。
规范
常见用例
- 识别数据库使用的密码哈希算法
- 在渗透测试或安全审查中审计密码哈希安全性
- 验证 bcrypt 成本因子和 Argon2 参数是否满足 OWASP 建议
- 理解 LDAP 目录密码存储方案
- 通过检查哈希格式和参数调试认证问题
功能
- 自动检测 MCF($1$、$2b$、$5$、$6$、$sha1$、$apr1$)、PHC($argon2id$、$scrypt$、$pbkdf2$)和 LDAP({SSHA}、{SHA}、{MD5})格式
- 显示算法、变体、参数(成本、轮数、内存、并行度)、盐值和哈希输出
- 安全评估:严重(MD5/无盐)、弱(SHA-1/低成本)、中等(SHA-crypt)、强(bcrypt 12+/argon2/scrypt)
- 颜色编码的安全评估建议
- 哈希编码格式显示(base64、hex 等)
- 从多行输入中解析多个哈希
- 显示哈希位长度和编码格式
- 每种算法的相关规范链接
示例
提示
- OWASP 推荐 bcrypt 成本因子 12 以上。每增加一级,计算时间翻倍。
- Argon2id 是当前最佳实践——它结合了侧信道抗性(argon2i)和 GPU 抗性(argon2d)。
- LDAP {SSHA} 是加盐的 SHA-1——比 {SHA} 好但仍是快速哈希。建议迁移到 bcrypt 或 Argon2。
- 粘贴编码面板的密码哈希输出到此处进行解码和验证。
理解 密码哈希解码器
密码哈希是将密码以单向加密哈希形式存储而不是明文的做法。当用户设置密码时,系统对其进行哈希并存储哈希值。登录时,系统对提交的密码进行哈希并将结果与存储的哈希进行比较。因为哈希函数是单向的,获得哈希数据库的攻击者无法直接恢复密码。
现代密码哈希算法有意设计为缓慢且内存密集,以抵抗暴力破解攻击。bcrypt 使用可配置的成本因子,每增加一级计算时间翻倍。Argon2(2015 年密码哈希竞赛的获胜者)增加了可配置的内存使用以抵抗基于 GPU 的攻击。scrypt 同样需要大量内存。这些"慢哈希"与快速哈希(MD5、SHA-256)根本不同,后者是为速度设计的,不适合密码存储。
密码哈希使用标准化的字符串格式以实现可移植性。模块化加密格式(MCF)使用 $ 分隔符:$2b$12$... 表示 bcrypt,$5$ 表示 SHA-256-crypt,$6$ 表示 SHA-512-crypt。PHC 字符串格式(用于 Argon2)添加了命名参数:$argon2id$v=19$m=65536,t=3,p=4$salt$hash。LDAP 系统使用方案前缀:{SSHA}、{PBKDF2}。
每个哈希都包含盐值——在哈希前与密码组合的随机数据,确保相同的密码产生不同的哈希。没有盐值,攻击者可以使用预计算的彩虹表立即查找常见密码哈希。盐值与哈希一起存储(它不是秘密),并为每个密码随机生成。
对于新应用程序,OWASP 推荐 Argon2id 为当前最佳实践。如果你的框架不支持 Argon2,成本因子 12 以上的 bcrypt 是次优选择,scrypt 也是可接受的。MD5、SHA-1 和纯 SHA-256 绝不应用于密码——它们太快了,在现代 GPU 上可以每秒暴力破解数十亿次。MD5 特别是被设计为快速校验和算法,不是为密码存储设计的,且存在已知的碰撞漏洞。无盐的 MD5 哈希也容易受到彩虹表攻击。
bcrypt 成本因子($2b$ 后的数字)是控制计算时间的指数。成本 10 意味着 2^10 = 1,024 次迭代,而成本 12 意味着 2^12 = 4,096 次迭代——比成本 10 慢四倍。OWASP 推荐最低成本 12。每增加一级时间翻倍,因此从 10 增加到 12 使哈希对服务器和任何攻击者都慢 4 倍。
盐值和胡椒值在密码安全中扮演不同的角色。盐值是与哈希一起存储的随机数据,每个密码唯一,确保相同的密码产生不同的哈希——盐值不是秘密。胡椒值是应用于所有密码的秘密密钥(通常通过 HMAC),与数据库分开存储在应用程序配置或硬件安全模块中。如果数据库被泄露但胡椒值没有,即使有盐值,攻击者也无法破解哈希。同时使用两者提供了纵深防御。