1

我正在使用 nodejs 库 scrypt 来散列我的密码。

scrypt.hash(new Buffer(data.password), scryptParameters, function(err, res) {
  console.log(res);
  //scrypt.verify(res, "incorrect password");
});

效果很好。但是,问题是当我取消注释验证哈希的行时(为了简单起见,我将它放在同一个函数中(并且同步地))

该脚本只是崩溃而没有任何错误!这就是我在控制台中得到的

/Users/foo/Documents/nodejs/wow/models/user.js:44
    scrypt.verify(res, "incorrect password");
           ^
[object Object]
31 Jul 10:26:52 - [nodemon] app crashed - waiting for file changes before starting...

似乎它正在尝试放置某种对象,即[object Object]. 我不是 console.log'ing 它,因为在取消注释该行之前我在控制台中什么都没有。

有人有同样的问题吗?提前致谢。

4

1 回答 1

1

问题是您使用了错误的密钥编码scrypt.verify()默认情况下,它需要一个缓冲区,但您提供的是一个字符串。将 更改"incorrect password"为 Buffer 或执行以下操作:

scrypt.hash(new Buffer(data.password), scryptParameters, function(err, res) {
  scrypt.verify.config.keyEncoding = "utf8";
  scrypt.verify(res, "incorrect password");
});
于 2014-07-31T02:40:28.680 回答