Argon2哈希验证|比对密码与已编码哈希
输入密码与已有的Argon2编码哈希($argon2id$...),检测两者是否匹配。全部计算均在浏览器本地完成,不会将任何内容发送到服务器。
Argon2哈希验证小贴士
- 验证时,请直接粘贴由Argon2哈希计算工具生成的已编码哈希(以 $argon2id$ 开头的字符串)。
- 已编码哈希中已经包含了变体类型、内存成本、迭代次数和盐值等全部信息,因此验证时无需另行指定这些参数。
- 如果哈希格式不正确(例如复制时缺漏字符或混入了换行符),系统会显示错误提示,请确认是否完整准确地复制了全文。
- 如果验证结果显示不匹配,请检查密码中是否意外包含了大小写差异或前后多余的空白字符。
常见问题
哈希计算是根据密码生成一个新的哈希值,而验证则是判断已有的哈希值与密码是否一致。通常的做法是在注册时生成并保存哈希,在登录时只进行验证。
当输入的哈希不是以 $argon2id$、$argon2i$ 或 $argon2d$ 开头的正确编码格式时,就会显示该提示。请检查复制时是否有字符缺漏,或者前后是否混入了多余的空格或换行符。
常见原因包括大小写差异、全角与半角字符的差异,以及前后混入了多余的空白字符。密码只要有一个字符不同就无法匹配,请再次核对原始字符串。
不会。所有输入内容都在浏览器内通过WebAssembly处理,不会发送到服务器,也不会被保存。
请使用配套的Argon2 哈希计算工具,支持 Argon2id、Argon2i、Argon2d 三种方式。
闲话 ― 为什么密码只需“比较哈希”就能完成验证
密码验证乍看之下像是“直接比较已保存的密码与输入的密码”,但实际的运作机制完全不同。服务器(或者像本工具这样在客户端进行处理的场景)会使用与保存时相同的算法和相同的盐值,对输入的密码重新计算一次哈希值,然后只需比较这个新计算出的结果是否与已保存的哈希值一致即可。原始密码本身从未被直接“比较”过,仅通过哈希值之间的一致性判断即可完成验证,这正是这种方式的优势所在。
这一机制之所以成立,是因为像Argon2这样的哈希函数具有“确定性”(deterministic)。只要输入内容、盐值和参数完全相同,就一定会得到相同的输出结果。已编码的哈希字符串(格式为 $argon2id$v=19$m=...$salt$hash)中已经嵌入了计算时使用的全部盐值和参数,因此验证时无需另行指定原始参数,仅凭这个哈希字符串本身就足以完成完整的重新计算。
正是因为具备“单向性”(无法从哈希值反向推算出原始密码)和“确定性”(相同输入必得相同输出)这两个特性,服务运营方才能够完全不保存用户的原始密码,同时依然能够在登录时安全地完成验证。即使数据库遭到泄露,攻击者所能获得的也只是哈希值,而对于像Argon2这样计算成本很高的算法而言,通过暴力破解还原出原始密码将耗费极其漫长的时间。