【问题标题】:Different digest from sha1 in JS and Python?与 JS 和 Python 中的 sha1 不同的摘要?
【发布时间】:2021-09-05 13:19:18
【问题描述】:

我已经被困了一段时间了,为了我的一生。

我在python3中有这个东西

msg = "6NmByERB9ZDJX9OKDtIzpGl8ei7KBiYI"+"\n"+"1623776851607"+"\n"+"/api2/v2/users/me"+"\n"+"0"
message = msg.encode('utf-8')
hash_object = hashlib.sha1(message)
sha_1_sign = hash_object.hexdigest()
print(sha_1_sign)
# 4ff521a9b87ddd0dea00a842f8f5d72819f9df0a

但我无法在 NodeJS 中GET THIS SAME HASH,我尝试了很多解决方案; 起初我虽然是第一部分,编码为 utf-8,因为打印返回不同的结果,但似乎不是这样,它只是同一字符串的不同表示。

我在 JS 中的做法:

const crypto = require('crypto') // maybe another library that works in browser? 
const msg = "6NmByERB9ZDJX9OKDtIzpGl8ei7KBiYI"+"\n"+"1623776851607"+"\n"+"/api2/v2/users/me"+"\n"+"0"
let shasum = crypto.createHash('sha1')
shasum.update(JSON.stringify(msg))
let hashed_string = shasum.digest('hex')
console.log(hashed_string)
// c838ca6f79551d828d6e4a810bd49c1df07b54a3

感谢您的帮助:)

【问题讨论】:

  • 为什么是JSON.stringify(msg)
  • msg !== JSON.stringify(msg)。它在开头和结尾添加"
  • @Samathingamajig 它做得更多。它用\n 替换换行符。 msg 的长度为 66,JSON.stringify(msg) 的长度为 71。
  • 天啊,我真的虽然我必须做一些相当于 python 的 encode("utf-8") 的事情,这就是为什么我之前添加了 stringifyencodeURI 和其他方法,但是没有,没有那个,只是有效,真是一段旅程,感谢您的评论,另一个愚蠢的错误,我花了几天时间才解决。

标签: javascript python hash encode sha1


【解决方案1】:

不要JSON.stringify 留言。 JSON.stringify 在开头和结尾添加双引号,并将所有换行符(和大多数其他空白字符)替换为两个字符 \nmsg 的长度为 66,JSON.stringify(msg) 的长度为 71。此代码生成预期的 SHA1 值:

const crypto = require('crypto') // maybe another library that works in browser? 
const msg = "6NmByERB9ZDJX9OKDtIzpGl8ei7KBiYI"+"\n"+"1623776851607"+"\n"+"/api2/v2/users/me"+"\n"+"0"
let shasum = crypto.createHash('sha1')
shasum.update(msg)
let hashed_string = shasum.digest('hex')
console.log(hashed_string)

这里你可以看到msgJSON.stringify(msg)的区别:

const msg = "6NmByERB9ZDJX9OKDtIzpGl8ei7KBiYI"+"\n"+"1623776851607"+"\n"+"/api2/v2/users/me"+"\n"+"0"

console.log(msg)
console.log(JSON.stringify(msg));
console.log(msg.length)
console.log(JSON.stringify(msg).length);
console.log(JSON.stringify(msg) === msg);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 2012-10-12
    • 2010-11-22
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2019-01-21
    • 2013-06-25
    相关资源
    最近更新 更多