在Node.js中计算sha1会返回与PHP不同的结果

时间:2016-12-16 00:42:34

标签: node.js hash base64 sha1

我使用以下PHP代码计算SHA1:

$hash = base64_encode(sha1($password.$key, true).$key);

但是当我在Node.js中执行此操作时,它不会给我相同的结果:

var hash = crypto.createHash('sha1').update(password + key).digest('base64');

为什么结果不同?

2 个答案:

答案 0 :(得分:0)

在您的PHP代码中,您在将密钥传递给sha1($password.$key, true).$key 之前将密钥附加到sha1:

var hash = crypto.createHash('sha1').update(password + key).digest('hex');
var result = new Buffer(hash + key).toString('base64');

为了在Node.js中复制它,你需要做同样的事情:

sha1
查看PHP docs on sha1后,

编辑,看起来传递给$hash = base64_encode(sha1($password.$key).$key); 的第二个参数将返回非十六进制数据:

  

如果可选的raw_output设置为TRUE,则sha1摘要将以原始二进制格式返回,长度为20,否则返回的值为40个字符的十六进制数。

因此,为了使两个片段的功能相同,您还需要修改PHP以不传递该参数:

template <typename T, typename>
auto get(T, T) { /* implementation1 */ }

答案 1 :(得分:0)

您需要在nodejs中附加密钥:

// php
$hash = base64_encode(sha1($password.$key, true).$key);
                                     // see this ^^^^

// node
var hash = crypto.createHash('sha1').update(password + key).digest('base64') + key;
                                                                // add this ^^^^^^