首页 > 解决方案 > 为python编码的内容十六进制的等效CryptoJS SHA512哈希?

问题描述

我正在尝试进行经过身份验证的 API 调用。JS 中的文档示例指出 contentHash 标头必须填充:

content = {currencySymbol:symbol};
var contentHash = CryptoJS.SHA512(JSON.stringify(content)).toString(CryptoJS.enc.Hex); 

我正在用 Python 编写我的请求,但我不断收到 INVALID_CONTENT_HASH。这是我到目前为止所拥有的:

content = {"currencySymbol":"BTC"}
contentHash = hashlib.sha512(json.dumps(content, separators=(',',':')).encode('latin1')).hexdigest()

哈希:18aa13a42b5efe3c45b37050626f23fcc4f3b4acf5e479f2f50212722cdcd80baa0ba6ddf8dcbd0f1b88008aaf9ec33874e4be9ab6ec2dece611c2dbdca87560

预期哈希:e6e0b5e9941269e61fb41bd4f6a0dc5be0da1c011087a057ff88fe3de98f41c6681983dd14662c88b6293663d942c93511c3fd7f9cc5250e686b16de53a18f57

我不知道我的请求有什么问题。请指教。

标签: javascriptpythoncryptojshashlib

解决方案


您的问题是json.dumps默认情况下会应用一些较小的漂亮打印,但JSON.stringify不会。

尝试这个:

content = {'currencySymbol':'BTC'}
contentHash = hashlib.sha512(json.dumps(content, separators=(',',':')).encode('latin1')).hexdigest()

通过添加separators=(',',':')to json.dumps,它将删除默认添加的额外空格

文档_json.dumps


推荐阅读