用python代码在Javascript中生成Hmac
问题描述:
我试图在javascript中生成一个hmac哈希。用python代码在Javascript中生成Hmac
这里是一些Python代码我想在Javascript中复制:
mac = hmac.new("33fsfsdgvwrg2g223f4f42gf4f34f43f", digestmod=hashlib.sha1)
mac.update(method)
mac.update(url)
mac.update(data)
mac.update(str(timestamp))
r = requests.request(method, url, data=data, headers={
'Content-Type': 'application/json',
'Authorization': " signature="'mac.hexdigest()'" ",
})
这是我迄今为止,它似乎并没有被我所需要的:
var message = "shah me";
var secret = "33fsfsdgvwrg2g223f4f42gf4f34f43f";
var crypto = CryptoJS.HmacSHA1(message, secret).toString(CryptoJS.enc.Base64);
var shaObj = new jsSHA('shah me', "ASCII");
var jssha = shaObj.getHMAC('33fsfsdgvwrg2g223f4f42gf4f34f43f', "ASCII", "SHA-1", "B64");
答
它看起来像你的“当前的解决方案”只是一个jsSHA, CryptoJS and OpenSSL libraries giving different results与您的密钥替换的复制粘贴。
无论如何,你不需要同时使用CryptoJS和jsSHA。你应该选择一个并坚持下去。
根据the docs,python mac.update函数等同于将数据附加到消息。我相信这是你的问题的关键,因为CryptoJS和jsSHA都没有相同的更新功能,而是期望你有完整的信息开始。
下面的Python代码和它后面的Javascript代码是相同的:
import hashlib
import hmac
method = 'method'
url = 'url'
data = 'data'
timestamp = 'timestamp'
mac = hmac.new("33fsfsdgvwrg2g223f4f42gf4f34f43f", digestmod=hashlib.sha1)
mac.update(method)
mac.update(url)
mac.update(data)
mac.update(timestamp)
print mac.hexdigest()
这里是JavaScript:
<script src="sha.js"></script>
<script>
var secret = '33fsfsdgvwrg2g223f4f42gf4f34f43f';
var message = 'methodurldatatimestamp';
var shaObj = new jsSHA(message, "ASCII");
document.write(shaObj.getHMAC(secret, "ASCII", "SHA-1", "HEX"));
</script>
注意,Javascript代码放在完整的消息('methodurldatatimestamp'
)在jsSHA的构造函数。我相信这是你的问题的关键。希望这可以帮助!