
[英]Different results trying to port SHA-1 digest from Python to browser JavaScript
[英]Different digest from sha1 in JS and Python?
为了我的生活,我已经被困在这个问题上一段时间了。
我在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 中获得相同的哈希值,我尝试了很多解决方案; 起初我虽然它是第一部分,编码到 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
消息。 JSON.stringify
在开头和结尾添加双引号,并用两个字符\\n
替换所有换行符(和大多数其他空白字符)。 msg
长度为 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)
在这里你可以看到msg
和JSON.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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.