You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Botan Argon2命令行工具验证哈希失败问题排查

解决Botan命令行工具Argon2哈希验证失败问题

问题场景

通过Botan命令行工具生成Argon2哈希:

botan gen_argon2 mypass

得到哈希值:

$argon2id$v=19$m=65536,t=1,p=1$Wr2U4EazXMyIS3RJJczZ9Q$TE4xgLdvtLVNgia9wyrXpI+KSFkw6YJo2RR0yQVeahM

执行验证命令时返回“Password is NOT valid”:

botan check_argon2 mypass $argon2id$v=19$m=65536,t=1,p=1$Wr2U4EazXMyIS3RJJczZ9Q$TE4xgLdvtLVNgia9wyrXpI+KSFkw6YJo2RR0yQVeahM

已尝试拆分哈希值、用引号包裹,且哈希值验证有效,但命令行验证始终失败;直接调用Botan的C++ API可正常验证哈希,推测是命令行解析问题。

解决方案

问题根源是Bash会解析哈希值中的$符号作为变量引用,导致实际传递给botan check_argon2的哈希值被篡改。正确做法是用单引号完全包裹哈希值,避免Bash解析特殊字符:

botan check_argon2 mypass '$argon2id$v=19$m=65536,t=1,p=1$Wr2U4EazXMyIS3RJJczZ9Q$TE4xgLdvtLVNgia9wyrXpI+KSFkw6YJo2RR0yQVeahM'

双引号无法解决问题,因为Bash仍会尝试解析$开头的内容(比如$argon2id会被当作未定义变量替换为空),只有单引号能完全屏蔽Shell的变量展开逻辑。

补充说明

当命令行参数包含$、!、空格等特殊字符时,都需要用单引号包裹以确保参数原样传递给程序。Botan的C++ API不受此影响,是因为直接传递字符串常量,无需经过Shell解析步骤。

内容的提问来源于stack exchange,提问作者jasg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:25:20