Argon2哈希校验

生成哈希
Argon2 是 2015 年密码哈希竞赛(PHC)冠军,被 OWASP 列为新系统的首选口令哈希算法。 它通过可调内存开销抵抗 GPU / ASIC 暴力破解,推荐参数为 argon2id、m=19 MiB、t=2、p=1。 它不可逆,无法从哈希值还原出密码。
生成结果
输入密码与参数后点击「生成哈希」

校验哈希

待校验的密码与哈希值
校验结果
粘贴已存储的哈希值,再输入密码进行校验
Argon2 的编码串自带算法类型、版本、内存、迭代、并行度与盐值,所以校验时不需要再填写任何参数,直接粘贴完整编码串即可。
校验只会在本机完成,密码与哈希值都不会发送到服务器。
编码串里的 m=19456 是内存开销(KiB,即 19 MiB),t=2 是迭代次数,p=1 是并行度。
在线生成与校验 Argon2(argon2id / argon2i / argon2d)密码哈希,可调内存开销、迭代次数、并行度与输出长度,输出标准 $argon2id$v=19$ 编码串;粘贴哈希串与密码即可校验。全部在本机浏览器完成,密码不上传服务器。

这个工具能做什么

Argon2 密码哈希生成与校验工具,分为两个面板:

  • 生成哈希:输入明文密码,配置算法类型、内存开销、迭代次数、并行度与输出长度,生成标准编码串,形如 $argon2id$v=19$m=19456,t=2,p=1$c29tZXNhbHQ$RdescudvJCsgt3ub+b+dWRWJTmaaJObG。
  • 校验哈希:粘贴已存储的 Argon2 编码串与密码,工具判断是否匹配。

所有计算都在浏览器本机完成,密码与哈希值都不会上传到服务器。

使用步骤

  1. 在「生成哈希」面板输入明文密码。
  2. 算法类型保持 argon2id(推荐);参数可用一键预设:

- OWASP 建议:m=19 MiB,t=2,p=1 - RFC 9106 高配:m=2 GiB,t=1,p=4(浏览器内存可能不足,会计算失败)

  1. 盐值保持「随机 16 字节」;需要复现某次结果时切到「自定义文本」。
  2. 点击「生成哈希」,结果区给出完整编码串与参数串。
  3. 校验时把编码串与密码填到下方「校验哈希」面板,点「校验」。

Argon2 是什么

Argon2 是 2015 年密码哈希竞赛(Password Hashing Competition, PHC)的获胜算法,由 Alex Biryukov、Daniel Dinu、Dmitry Khovratovich 设计,2017 年由 IETF 发布为 RFC 9106。

项目说明
发布时间2015(PHC 冠军),RFC 9106(2017)
设计者Biryukov、Dinu、Khovratovich
结构基于 Blake2b 的填充内存块压缩函数
版本v=19(0x13),当前标准版本
盐长度建议 16 字节(最少 8 字节)
是否可逆不可逆
抗 GPU强,通过可调内存开销实现

三种变体的区别

类型内存访问方式抗侧信道适用场景
argon2d数据相关(Data-dependent)弱抗 GPU 最强,但存在侧信道风险,不建议用于服务端
argon2i数据无关(Data-independent)强适合存在侧信道威胁的环境,抗 GPU 稍弱
argon2id混合(前半数据无关,后半数据相关)较强推荐默认值,兼顾抗侧信道与抗 GPU

OWASP 与 RFC 9106 都推荐把 argon2id 作为默认选择。

参数怎么选

Argon2 有三个可调维度,这是它比 Bcrypt 更强的地方:

参数含义作用
m(memorySize)内存开销,单位 KiB抗 GPU / ASIC 的关键。强制每次计算占用大量内存,让并行破解受限
t(iterations)迭代次数(时间开销)增加计算轮数,抬高单次成本
p(parallelism)并行度(线程数)决定可用的并行通道数,不影响总内存开销
l(hashLength)输出长度,单位字节通常 32 字节(256 位)足够

推荐配置:

来源mtp说明
OWASP(2024)19456(19 MiB)21通用推荐,本工具默认值
RFC 9106 第一推荐2097152(2 GiB)14高安全场景
RFC 9106 第二推荐65536(64 MiB)34折中方案
低内存环境47104(46 MiB)11资源受限时

选择原则与 Bcrypt 相同:让单次校验耗时落在 100 – 500 毫秒之间。如果服务器内存紧张,宁可降低 m 并提高 t,也不要让 m 低到失去抗 GPU 的意义(低于 8 MiB 基本失去内存硬化优势)。

编码串的结构

以 $argon2id$v=19$m=19456,t=2,p=1$c29tZXNhbHQ$RdescudvJCsgt3ub+b+dWRWJTmaaJObG 为例:

片段含义
$argon2id$算法变体
v=19版本号(0x13 = 19)
m=19456,t=2,p=1内存 KiB、迭代次数、并行度
c29tZXNhbHQ盐值的 Base64(无填充)
RdescudvJCsgt3ub+b+dWRWJTmaaJObG摘要的 Base64(无填充)

因为参数与盐值都写在串里,校验时不需要再填任何参数。

Argon2 与 Bcrypt、PBKDF2 的对比

维度PBKDF2BcryptArgon2
发布年份200019992015
抵抗 GPU弱(只消耗 CPU 时间)一般强(可调内存)
抵抗 ASIC弱弱强
参数维度1(迭代次数)1(cost)3(m / t / p)
标准化RFC 8018、NIST事实标准RFC 9106
FIPS 合规是否否
推荐度兼容性优先时存量系统新项目首选

常见误区

  • 内存参数设得越大越好。m 过大会让服务器内存迅速耗尽,攻击者可以用大量登录请求把服务打挂(拒绝服务)。应在压测后确定上限,并限制并发校验数量。
  • argon2d 抗 GPU 最强,所以最好。argon2d 的数据相关内存访问会带来侧信道泄露风险,服务端场景应使用 argon2id。只有在能排除侧信道威胁的封闭环境才考虑 argon2d。
  • Argon2 是加密。它是单向哈希,无法还原原文。
  • 一次生成后可以长期不换参数。随着硬件进步,同样的参数会越来越快被破解,建议每隔几年重新评估参数(用户下次登录时用新参数重新哈希是常见做法)。

常见问题 FAQ

Argon2 能用来加密文件吗?

不能。Argon2 是为口令设计的慢哈希,输出固定长度摘要,不可逆,既不能加密数据也不能解密。加密文件请使用 AES 等对称加密算法。

浏览器里算 Argon2 会不会很慢?

默认参数(m=19 MiB、t=2、p=1)在普通电脑上约 50 毫秒,几乎无感。如果手动把 m 调到 1 GiB 以上,浏览器可能因内存不足而失败,本工具的「RFC 9106 高配」预设需要 2 GiB 内存,仅供参数演示,不建议实际使用。

为什么 argon2id 编码串里会有 v=19?

v=19 是 Argon2 的版本号,十六进制 0x13 即十进制 19,对应 2017 年 RFC 9106 的标准版本。校验时版本号参与计算,所以不同版本的同一算法不能互换。

密码和哈希值会被上传到服务器吗?

不会。生成与校验全部通过浏览器本地的 WebAssembly 完成,页面不发送任何包含密码或哈希值的请求,可在开发者工具 Network 面板确认。

Argon2 符合 FIPS 合规要求吗?

不符合。Argon2 不是 NIST 标准算法,无法通过 FIPS 140 认证。如果业务必须满足 FIPS 合规(如部分政府、金融场景),只能选择 PBKDF2(HMAC-SHA256),因为它是 NIST SP 800-132 认可的算法。

Argon2 和 Bcrypt 该选哪个?

新项目优先 Argon2id,它多出内存开销这个维度,能有效抵抗 GPU 与 ASIC 破解。Bcrypt 的优势是兼容性极好,几乎所有语言框架都内置,适合存量系统。OWASP 推荐顺序是 Argon2id > scrypt > Bcrypt > PBKDF2。

校验时为什么不需要填参数?

Argon2 的编码串自带算法变体、版本号、内存、迭代次数、并行度与盐值,校验函数可以直接从串里解析。这也是它比 PBKDF2 更方便的地方——PBKDF2 输出裸摘要,校验必须额外提供全部参数。

Argon2 的哈希串为什么每次都不一样?

因为每次生成都会取新的随机 16 字节盐值。盐值写进编码串里,所以校验时仍能正确匹配。这是防止彩虹表攻击的必要设计。

内存参数 m 设得越大越安全吗?

安全性会提高,但不能无限加大。m 过大会耗尽服务器内存,攻击者可以用大量登录请求发起拒绝服务攻击。应先压测确定单次校验的内存与耗时上限,并限制并发校验数量,再确定参数。

推荐的参数是多少?

OWASP(2024)推荐 argon2id、m=19456 KiB(19 MiB)、t=2、p=1,本工具默认值就是这一组。RFC 9106 的第一推荐是 m=2 GiB、t=1、p=4,第二推荐是 m=64 MiB、t=3、p=4。核心原则是让单次校验耗时落在 100 – 500 毫秒之间。

argon2id、argon2i、argon2d 该选哪个?

服务端一律选 **argon2id**。argon2d 使用数据相关的内存访问,抗 GPU 最强但存在侧信道泄露风险;argon2i 使用数据无关访问,抗侧信道但抗 GPU 稍弱;argon2id 混合两者,是 OWASP 与 RFC 9106 共同推荐的默认值。

Argon2 是什么?

Argon2 是 2015 年密码哈希竞赛(PHC)的获胜算法,由 Biryukov、Dinu、Khovratovich 设计,2017 年由 IETF 发布为 RFC 9106。它通过可调的内存开销抵抗 GPU 与 ASIC 破解,被 OWASP 列为新系统的首选口令哈希算法。