加密与哈希

Argon2哈希计算|支持Argon2id・Argon2i・Argon2d

输入密码等字符串即可计算Argon2哈希值。支持Argon2id、Argon2i、Argon2d三种方式,并可选择OWASP推荐的内存开销・迭代次数预设。全部计算均在浏览器内完成,输入内容不会发送到服务器。


Argon2哈希计算使用提示

  • Argon2 是2015年“密码哈希竞赛”(Password Hashing Competition)的优胜算法,其中Argon2id是OWASP目前推荐的方式。若无特殊理由,建议选择Argon2id。
  • 预设按钮对应OWASP密码存储备忘单(Password Storage Cheat Sheet)推荐的5种内存开销・迭代次数组合。内存开销越大,对GPU并行破解的抵抗力越强。
  • 提高“并行度(p)”在浏览器端的WebAssembly实现中并不会真正并行处理,计算耗时几乎不变。并行度带来的加速仅在多核服务器环境下才有效。
  • 盐值会在每次计算时自动重新生成,因此即使是相同的字符串和参数,每次输出的完整哈希编码也不同。
  • 将内存开销设置得过大时,浏览器标签页可能会暂时无响应。建议先从几十MB左右开始尝试。

常见问题

如果是新开发的系统,Argon2id是首选方案,OWASP目前也将Argon2id列为第一推荐。不过如果现有系统已在使用BCrypt,迁移时需要注意重新计算哈希(例如在下次登录时重新哈希)。

Argon2d 对GPU攻击的抵抗力最强,但容易受到侧信道攻击;Argon2i 则相反。Argon2id 是结合两者设计的混合方案,若无特殊理由,建议优先选择Argon2id。

本工具的预设按钮对应OWASP密码存储备忘单推荐的5种组合。如果要在服务器上实际使用,建议以单次哈希计算耗时100〜500毫秒左右为目标,并结合可用内存进行调整。

可以。由于使用的是标准Argon2算法,生成的哈希值可以直接通过PHP的password_verify()或其他语言的Argon2验证库进行校验。不过请务必妥善处理输入内容。

不会。哈希计算全部在浏览器内的WebAssembly中完成,输入内容不会被发送到任何外部服务器。
ツールくん

闲话 ― 密码哈希竞赛与Argon2的诞生背景

Argon2 是在2013年至2015年举办的“密码哈希竞赛(Password Hashing Competition, PHC)”中,从24个参赛方案中脱颖而出、被选为最优算法的成果。BCrypt(1999年)、PBKDF2(2000年)等既有方式存在一个共同弱点——容易被GPU、ASIC等专用硬件加速暴力破解,为克服这一弱点,Argon2 在设计上要求计算过程消耗大量内存。

Argon2 共有3种变体。Argon2d对GPU攻击的抵抗力最强,但容易受到侧信道攻击;Argon2i则相反,能较好抵御侧信道攻击,但GPU抵抗力略逊一筹。Argon2id是结合两者优点的混合方案,OWASP等众多安全机构都将其列为密码存储的首选算法。

PHP 自7.2版本起,只需在password_hash()函数中指定PASSWORD_ARGON2ID常量即可生成Argon2id哈希。Node.js、Python、Ruby等主流语言也都提供了官方或准官方的库支持,在新开发的系统中,越来越多的开发者将Argon2id作为密码存储的第一选择,而非BCrypt。