【发布时间】: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")的事情,这就是为什么我之前添加了stringify和encodeURI和其他方法,但是没有,没有那个,只是有效,真是一段旅程,感谢您的评论,另一个愚蠢的错误,我花了几天时间才解决。
标签: javascript python hash encode sha1