簡體   English   中英

在Python和JavaScript中使用哈希sha1

[英]Hash sha1 in Python and JavaScript

我用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'))

但結果卻不盡相同。

你在hash.update()中調用hash.digest() ,但是需要在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

蟒蛇:

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

在Python中創建的字符串使用單引號,並使用其他空格字符進行格式化,因此生成的哈希值將不同。

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

暫無
暫無

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

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