[英]Javascript HMAC and Python HMAC not returning same hash
我目前有一个看起来像这样的 Javascript 代码
var CryptoJS = require("crypto-js");
var key = "bookbookbook";
var msg = "2020-06-16 20:03:19";
var signature = CryptoJS.HmacSHA1(msg, key);
var checksum = CryptoJS.enc.Utf8.parse(signature);
console.log("checksum: " + CryptoJS.enc.Base64.stringify(checksum));
校验和为 ODNjOWY5NThmYzUxODNkYWM1MjhjZTY3ZTYzYmQxNjE1ZDRkZDQ5Zg==
我试图将其转换为 Python
import base64
import time
import hmac
import hashlib
key = "bookbookbook".encode(encoding='utf-8')
msg = "2020-06-16 20:03:19".encode(encoding='utf-8')
digest = hmac.new(key, msg, hashlib.sha1).digest()
checksum = base64.b64encode(digest).decode('utf-8')
print(checksum)
但返回的校验和是这个 g8n5WPxRg9rFKM5n5jvRYV1N1J8=
我如何使它返回相同?
此步骤是不必要的,并且会转换您的数据,从而导致结果错误: var checksum = CryptoJS.enc.Utf8.parse(signature);
( Utf8.parse
用于将 UTF-8 字符串转换为 wordsArray,但由于CryptoJS.HmacSHA1
的调用,您已经有了 wordsArray)
您的代码应该是:(负责将变量名称更改为更合适的名称)
var CryptoJS = require("crypto-js");
var key = "bookbookbook";
var msg = "2020-06-16 20:03:19";
var encrypted = CryptoJS.HmacSHA1(msg, key);
console.log("encrypted in Base64: " + CryptoJS.enc.Base64.stringify(encrypted));
我找到了解决方案。 虽然我同意 Kaddath 的 Javascript 很烂,但我无法更改它,因为 1)它已经使用并运行了好几年,2)我正在做一个 Python 的端口,而不是修复/更新原始代码和3)“da bossman”说只是端口不修复
这是产生相同 output 的 Python 代码:
import base64
import time
import hmac
import hashlib
import binascii
key = "bookbookbook".encode(encoding='utf-8')
msg = "2020-06-16 20:03:19".encode(encoding='utf-8')
digest = hmac.new(key, msg, hashlib.sha1).digest()
checksum = base64.b64encode(binascii.hexlify(bytearray(digest)))
print("checksum: ", checksum.decode('utf-8'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.