将python哈希摘要移植到节点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中我需要这种格式的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相同的风格产生输出? 这显然不是二进制或hex,python输出格式是什么?

两个结果都是一样的。 字节的string表示(你在控制台上看到的东西)在JavaScript和Python中有所不同。 为了certificate它们是相同的,将两者都转换为一个整数列表:

 > 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] 

您可以使用digest('hex') / digest('hex')来获得一个hexstring( 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3' ),这可能更容易处理。

但是没有什么错误的字节; 再次,这只是不同的string表示。 例如,如果您将两个字节写入文件,则两个文件将完全相同。