javascript - 从 python 代码生成 Javascript 中的 Hmac

标签 javascript python hmac hmacsha1

我正在尝试在 JavaScript 中生成 hmac 哈希。

这是我想在 Javascript 中复制的一些 Python 代码:

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 的复制粘贴用您的 key 替换。

无论如何,你不需要同时使用 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 构造函数中。我相信这是你问题的关键。希望这有帮助!

关于javascript - 从 python 代码生成 Javascript 中的 Hmac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26287101/

相关文章:

javascript - 跨域哈希变化通信

javascript 练习 - 带字符串的递归函数

python - 循环指示器的进度

python - 使用 PyCrypto 解密 AES 和 HMAC

java - OpenSSL Hmac 和 BouncyCaSTLe Hmac 不同

javascript - 纯 JavaScript 中的 jQuery 函数

javascript - Node 的 Browserify 是否绕过了 Javascript 的沙箱?

python - 使用matplotlib绘制图时,X轴刻度标签太密

python - 如何在 Jupyter Notebook 中表示地理 map 上的标量变量

java - 如何在 Java 中生成与 Python 示例等效的 HMAC?