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

确认AWS Cognito设备时为何出现salt或密码验证器负数错误?

AWS Cognito ConfirmDevice 报错:Found negative value for salt or password verifier

问题根源

错误出在long_to_hex函数的实现上,而非hash_sha256的补零逻辑。AWS Cognito要求PasswordVerifier必须是2048位无符号大整数的固定长度(512字符)十六进制字符串,若转换后的十六进制存在前导负号或长度不足,Cognito会将其解析为负数,触发该错误。

修复方案

1. 修正long_to_hex函数

替换为以下实现,确保生成符合要求的十六进制字符串:

def long_to_hex(value):
    # 转换为无符号十六进制(大写),去掉0x前缀
    hex_str = format(value, 'X')
    # 补前导零至512字符(匹配2048位大整数的十六进制长度)
    return hex_str.zfill(512)

2. 简化哈希函数(可选)

当前hash_sha256函数的补零逻辑是冗余的(hashlib.sha256(buf).hexdigest()始终返回64个字符),可简化为:

def hash_sha256(buf):
    return hashlib.sha256(buf).hexdigest()

原因说明

当pow(self.g, ..., self.big_n)生成的大整数最高位为1时,部分旧的十六进制转换方法会误将其当作有符号数处理,输出带负号的结果。使用format(value, 'X')可确保生成无符号十六进制,zfill(512)则保证长度符合Cognito的2048位要求,避免解析错误。

测试验证

修改后重新运行设备确认流程,观察passwordVerifier(hex)输出是否始终为512字符的大写十六进制字符串,无负号前缀,即可解决随机报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:07:56