Хэш sha1 в Python и JavaScript - PullRequest
       47

Хэш sha1 в Python и JavaScript

0 голосов
/ 19 февраля 2019

Я сделал скрипт на Python:

hashed_string = hashlib.sha1(str(string_to_hash).encode('utf-8')).hexdigest()

, и он работает, как я хочу, но я не могу понять, как это сделать в JavaScript.Я сделал это в JS:

const crypto = require('crypto') 
let shasum = crypto.createHash('sha1') 
let hashed_string = shasum.update(JSON.stringify(string_to_hash).digest('hex'))

Но результат не тот.

1 Ответ

0 голосов
/ 19 февраля 2019

Вы звоните hash.digest () внутри hash.update () , но digest() необходимо вызывать после update()

например

const crypto = require('crypto') 
let shasum = crypto.createHash('sha1')
shasum.update(JSON.stringify(string_to_hash)) 
let hashed_string = shasum.digest('hex'))

или

const crypto = require('crypto') 
let shasum = crypto.createHash('sha1')
let hashed_string = shasum.update(JSON.stringify(string_to_hash)).digest('hex'))

или

const crypto = require('crypto') 
let hashed_string = crypto.createHash('sha1').update(JSON.stringify(string_to_hash)).digest('hex'))

Если вы используете точно такую ​​же строку в Python, которую возвращает метод JSON.stringify(), вы получите то же самоерезультат.Любые дополнительные символы будут влиять на результат.

Например, вот сгенерированные SHA1 хэши для некоторых похожих строк.

#1: {a:1,b:2}          // ca681fb779d3b6f82af9b243c480ce4fb07e7af4
#2: {a:1, b:2}         // 6327727c37c8d1893d9e341453dd1b8c7e72ffe8
#3: {"a":1,"b":2}      // 4acc71e0547112eb432f0a36fb1924c4a738cb49
#4: {"a":1, "b":2}     // 98e0e65ec27728cd01356be19e354d92fb2f4b46
#5: {"a":"1", "b":"2"} // a89dd0ae872ef448a6ddafc23b0752b799fe0de1

Javascript:

d = {a:1, b:2}  // Simple object
JSON.stringify(d) // {"a":1,"b":2} : #3 Above

Python:

d = {"a":1, "b":2}
str(d)
"{'a': 1, 'b': 2}"

Строка, созданная в Python, использует одинарные кавычки и отформатирована с дополнительными пробелами, поэтому результирующий хэш не будет таким же.

#6: {'a': 1, 'b': 2} // 326a92518b2b2bd864ff2d88eab7c12ca44d3fd3
...