将 python 哈希摘要移植到节点 js
Porting python hash digest to node js
我正在尝试将 Python 脚本移植到 Node,但我陷入了 SHA1 哈希。
以下Python代码:
import hashlib
user = 'test'
ret = hashlib.sha1(user.encode('utf-8')).digest()
print(ret);
打印出来:
b'\xa9J\x8f\xe5\xcc\xb1\x9b\xa6\x1cL\x08s\xd3\x91\xe9\x87\x98/\xbb\xd3'
我需要在 Node.js 中使用这种格式的 SHA1 哈希。这个Javascript:
var crypto = require('crypto');
var generator = crypto.createHash('sha1');
generator.update(new Buffer('test'));
console.log(generator.digest('binary'));
打印
©Jå̱sÓé/»Ó
如何让 Node 以与 Python 相同的风格生成输出?显然不是二进制或十六进制,python输出的是什么格式?
两个结果已经相同了。字节的字符串表示(您在控制台上看到的内容)在 JavaScript 和 Python 中有所不同。为证明它们相同,将两者转换为整数列表:
> var crypto = require('crypto');
> var generator = crypto.createHash('sha1');
> generator.update(new Buffer('test'));
> var digest = generator.digest('binary');
> var lst = [];
> for (let i = 0;i < digest.length;i++) st.push(digest.charCodeAt(i));
> console.log(JSON.stringify(lst));
[169,74,143,229,204,177,155,166,28,76,8,115,211,145,233,135,152,47,187,211]
python 中的相同结果:
>>> import hashlib, base64
>>> ret = hashlib.sha1('test'.encode('utf-8')).digest()
>>> print(list(ret))
[169, 74, 143, 229, 204, 177, 155, 166, 28, 76, 8, 115, 211, 145, 233, 135, 152, 47, 187, 211]
可以用hexdigest
/digest('hex')
得到16进制的字符串('a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'
),这样可能比较好办
但是字节没有问题;同样,只是字符串表示形式不同。例如,如果您将两个字节写入一个文件,那么两个文件将完全相同。
我正在尝试将 Python 脚本移植到 Node,但我陷入了 SHA1 哈希。
以下Python代码:
import hashlib
user = 'test'
ret = hashlib.sha1(user.encode('utf-8')).digest()
print(ret);
打印出来:
b'\xa9J\x8f\xe5\xcc\xb1\x9b\xa6\x1cL\x08s\xd3\x91\xe9\x87\x98/\xbb\xd3'
我需要在 Node.js 中使用这种格式的 SHA1 哈希。这个Javascript:
var crypto = require('crypto');
var generator = crypto.createHash('sha1');
generator.update(new Buffer('test'));
console.log(generator.digest('binary'));
打印
©Jå̱sÓé/»Ó
如何让 Node 以与 Python 相同的风格生成输出?显然不是二进制或十六进制,python输出的是什么格式?
两个结果已经相同了。字节的字符串表示(您在控制台上看到的内容)在 JavaScript 和 Python 中有所不同。为证明它们相同,将两者转换为整数列表:
> var crypto = require('crypto');
> var generator = crypto.createHash('sha1');
> generator.update(new Buffer('test'));
> var digest = generator.digest('binary');
> var lst = [];
> for (let i = 0;i < digest.length;i++) st.push(digest.charCodeAt(i));
> console.log(JSON.stringify(lst));
[169,74,143,229,204,177,155,166,28,76,8,115,211,145,233,135,152,47,187,211]
python 中的相同结果:
>>> import hashlib, base64
>>> ret = hashlib.sha1('test'.encode('utf-8')).digest()
>>> print(list(ret))
[169, 74, 143, 229, 204, 177, 155, 166, 28, 76, 8, 115, 211, 145, 233, 135, 152, 47, 187, 211]
可以用hexdigest
/digest('hex')
得到16进制的字符串('a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'
),这样可能比较好办
但是字节没有问题;同样,只是字符串表示形式不同。例如,如果您将两个字节写入一个文件,那么两个文件将完全相同。