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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Node.js中计算sha1会返回与PHP不同的结果相关的知识,希望对你有一定的参考价值。

我正在使用以下php代码计算SHA1:

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

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

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

为什么结果不同?

答案

在您的PHP代码中,您将密钥附加到sha1,然后将其传递给base64

sha1($password.$key, true).$key

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

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

编辑:在查看PHP docs on sha1后,看起来传递给sha1的第二个参数将返回非十六进制数据:

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

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

$hash = base64_encode(sha1($password.$key).$key);
另一答案

您需要在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 ^^^^^^

以上是关于在Node.js中计算sha1会返回与PHP不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

PHP 与 Node.js - 在 Node.js 中使用 Jade 的 HTML 渲染速度会变慢吗?

Node.js 中的 Hash_hmac 等效项

Node.js_密码明文_密文_加密库_sha1

为啥我在 node.js 中使用 parseInt 会得到奇怪的结果? (与 chrome js 控制台的结果不同)

C#中的SHA1哈希值是否会永远返回给定字符串的相同值?

node.js哲学与核心原理