寻求Python argon2库中用于禁用账户的特殊Argon2哈希值
Argon2 实现账户禁用的特殊哈希方案
核心思路
要实现仅通过修改哈希值禁用账户、验证时仅触发VerifyMismatchError且视觉可区分的需求,关键是生成格式完全合法但对应不存在密码的Argon2哈希:
- 基于标准Argon2哈希结构,修改盐值为带特殊标识(如
!)的内容,保证哈希格式合法,避免解析异常。 - 由于该哈希对应的真实密码不存在,验证任何输入都会触发
VerifyMismatchError,同时盐值中的!能让哈希和正常哈希视觉区分(类似/etc/shadow的!标识)。
示例代码
import argon2 from argon2.exceptions import VerifyMismatchError # 预先生成禁用账户的特殊哈希(使用带!的盐,对应一个不存在的密码) # 可以提前生成一次,直接存储使用 ph = argon2.PasswordHasher() # 生成示例:运行后会得到类似 $argon2id$v=19$m=65536,t=3,p=4$I2Rpc2FibGVkX3NhbHRfMTIzNA$xxx 的哈希 # disabled_hash = ph.hash("__DISABLED_ACCOUNT__", salt=b"!disabled_salt_1234") # 替换为预先生成的禁用哈希 valid_but_impossible_hash = "$argon2id$v=19$m=65536,t=3,p=4$I2Rpc2FibGVkX3NhbHRfMTIzNA$JZ9KZ7eQVQa9QpZ8eU7x5y4w3v2u1t0s9r8q7p6o5n4m3l2k1j0i" try: ph.verify(valid_but_impossible_hash, "user_input_password") print("password is valid") except VerifyMismatchError: print("password is invalid") # 格式合法的哈希不会触发其他异常,因此无需额外处理解析类错误
说明
- 格式合法性:该哈希完全符合Argon2的格式规范,验证时不会抛出解析错误类异常,只会因密码不匹配触发
VerifyMismatchError。 - 视觉区分:哈希的盐值部分包含
!标识,存储时能一眼识别为禁用账户的特殊哈希。 - 灵活性:如果需要区分“账户禁用”和“密码错误”,可以在捕获
VerifyMismatchError后,检查哈希中是否包含预设的特殊盐值标识,再输出对应提示。
内容的提问来源于stack exchange,提问作者bitinerant
相关产品推荐
相关产品推荐

