簡體   English   中英

從python代碼以Javascript生成Hmac

[英]Generate Hmac in Javascript from python code

我正在嘗試在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和OpenSSL庫的復制粘貼,使用您的密鑰替換后可提供不同的結果

無論如何,您無需同時使用CryptoJS和jsSHA。 您應該選擇一個並堅持下去。

根據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構造函數中。 我相信這是解決您問題的關鍵。 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM