将JavaScript HMAC-SHA256签名函数转Python3遇错求助
问题解决方法
错误原因
- 参数传递问题:
hmac.new的digestmod参数传入hashlib.sha256可能在部分环境下引发类型错误,正确用法是传入哈希算法名称字符串(如'sha256'),这种形式兼容性更强。 - 摘要编码不匹配:JavaScript 代码输出的是Base64 编码的 HMAC 摘要,而你当前的 Python 代码用
hexdigest()生成的是十六进制字符串,两者编码格式完全不同。
修改后的 Python 代码
import hmac import hashlib import base64 message = "a" key = "NgTriSCalcUltAbLoGResOnOuSeAKeSTraLryOuR" # 初始化HMAC对象,密钥和消息需编码为字节格式 hmac_obj = hmac.new(key=key.encode('utf-8'), msg=message.encode('utf-8'), digestmod='sha256') # 获取字节摘要后进行Base64编码,再转为字符串 signature = base64.b64encode(hmac_obj.digest()).decode('utf-8') print(signature)
运行结果
执行上述代码后,输出将与 JavaScript 代码完全一致:
vC8XBte0duRLElGZ4jCsplsbXnVTwBW4BJsUV1qgZbo=
内容的提问来源于stack exchange,提问作者Nacho Sarmiento
相关产品推荐
相关产品推荐

