在Javascript中生成的HMAC与在python中生成的HMAC不匹配(使用utf8编码字符)

2024-09-29 19:35:27 发布

您现在位置:Python中文网/ 问答频道 /正文

python服务器生成hmac:

dict_payload = {"name": "Emulsión"}
payload = jsonpickle.encode(dict_payload, unpicklable=False)
python_hmac = hmac.new("secret", bytes(payload, "utf-8"), hashlib.sha256,)

returns - 29c7e4b7049a61c24d0f57c402510d6b0c42b15e97981d6ce96b02fdcf913a45

在节点js中:

payload = {"name": "Emulsión"}
crypto
    .createHmac("sha256", "secret")
    .update(payload, "utf8")
    .digest("hex");

returns - 61d834992df9a302d8ca1768d4d04be644ba1c35054b342db3ed29f4b2f1e888

似乎在python中ó字符被\u00f3替换 如何在Javascript中实现同样的功能


Tags: name服务器falsenewsecretbyteshmacdict
1条回答
网友
1楼 · 发布于 2024-09-29 19:35:27

您需要确保正确处理输入中的引号

payload = {"name": "Emulsión"}
str(payload)

给你:

"{'name': 'Emulsión'}"

这与包含双引号的json字符串不同:

'{"name": "Emulsión"}'

并将导致不同的结果。如果您确保字符串完全相同,您将得到相同的结果:

import hmac 
import hashlib

payload = '{"name": "Emulsión"}'
    
python_hmac = hmac.new(b"secret", bytes(payload, "utf-8"), hashlib.sha256,)

python_hmac.hexdigest()

# '61d834992df9a302d8ca1768d4d04be644ba1c35054b342db3ed29f4b2f1e888'

相关问题 更多 >

    热门问题