Argon2 生成器
生成 Argon2id 密码哈希,使用随机的 16-byte 盐值,并可自行选择内存、迭代次数、并行度和哈希长度。内存上限为 64 MiB,迭代次数上限为 4;默认值遵循 OWASP 基准,即 19 MiB 和 2 轮。工具会返回以 $argon2id$v=19$ 开头的标准 PHC 字符串,可由 PHP、libsodium 和 argon2 库验证。密码绝不会回显。
常见问题
什么是 Argon2id?
Argon2 在 2015 赢得了密码哈希竞赛,并在 RFC 9106 中进行了规范。Argon2id 是混合变体,可抵御侧信道攻击和 GPU 攻击。OWASP 和该 RFC 都推荐使用此变体存储密码。
内存、迭代次数和并行度设置分别是什么意思?
内存设置每个哈希使用多少 MiB,迭代次数设置对该内存运行多少轮,平行度则设置通道数量。增加内存和迭代次数会提高攻击者每次猜测的成本。此处内存范围为 1 到 64 MiB,迭代次数范围为 1 到 4,并行度范围为 1 到 4。
应该使用哪些设置?
默认值为 19 MiB、2 次迭代和 1 个通道,这是 OWASP 对 Argon2id 的最低要求。PHP 的默认值为 64 MiB 和 4 次迭代,你也可以在此复现。用于生产环境时,应为每次登录尽可能提供服务器可承受的内存。
为什么内存和迭代次数有上限?
每个哈希都会实际分配你所请求的内存,并在共享服务器上运行每一轮计算。将上限设为 64 MiB 和 4 次迭代,可使每个请求只需不到一秒,同时仍覆盖常见的生产环境设置。
输出字符串包含什么?
例如 $argon2id$v=19$m=19456,t=2,p=1$ 后跟盐值和哈希的结果字符串,列出了变体、版本、以 KiB 为单位的内存、迭代次数和通道数。盐值和哈希使用无填充的 Base64 编码。请保存整个字符串,因为验证时会从中读取所有参数。
为什么每次生成的哈希都不同?
每个请求都会使用一个全新的随机 16-byte 盐值,因此同一密码每次都会生成不同的字符串。只要密码正确,它们都能通过验证。
可以选择哈希长度吗?
可以,范围为 16 到 64 bytes,默认值为 32 bytes。较长的标签不会增加猜测难度,因此存储密码时 32 bytes 就足够了。
哪些系统接受这些哈希?
PHP、libsodium 的 crypto_pwhash_str_verify、Node.js 的 argon2 包、Python 的 argon2-cffi 和 Spring Security 都能读取 PHC 字符串格式。本网站的 Argon2 Verifier 也可以验证这些字符串。
我的密码会被存储或返回吗?
不会。密码只会在内存中用于计算哈希,并会从响应中移除。它绝不会被记录或保存。
我可以生成 Argon2i 或 Argon2d 哈希吗?
不可以。此工具只生成 Argon2id,因为它是推荐用于密码的变体。Argon2 Verifier 仍可接受 Argon2i 和 Argon2d 哈希。