Javascript HMA C и Python HMA C не возвращают один и тот же хеш - PullRequest
0 голосов
/ 16 июня 2020

Сейчас у меня есть код 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 ==

100137 ** Я пытался преобразовать его в *

, но возвращенная контрольная сумма - это g8n5WPxRg9rFKM5n5jvRYV1N1J8 =

Как сделать так, чтобы он возвращал то же самое?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Я нашел решение. Хотя я согласен с Kaddath, но Javascript - отстой, я не могу его изменить, потому что 1) он использовался и работает уже несколько лет и 2) я делаю перенос на Python, не исправление / обновление исходного кода и 3) «da bossman» говорит, что просто порт не исправлен

Вот код 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'))
0 голосов
/ 16 июня 2020

этот шаг является ненужным и преобразует ваши данные, делая результат неверным: var checksum = CryptoJS.enc.Utf8.parse(signature); (Utf8.parse используется для преобразования строки UTF-8 в wordsArray, но у вас уже есть wordsArray в результате CryptoJS.HmacSHA1 ' s call)

Ваш код должен быть: (взял на себя ответственность изменить имена переменных на что-то более подходящее)

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 код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...