簡體   English   中英

Javascript HMAC 和 Python HMAC 不返回相同 hash

[英]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));

在小提琴中看到它,你會看到與 python 代碼相同的結果

我找到了解決方案。 雖然我同意 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.

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