[英]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.