【问题标题】:What "digest" argument should I provide?我应该提供什么“摘要”论点?
【发布时间】:2018-02-15 16:01:24
【问题描述】:

我以前在登录和注册功能中有如下代码:

var crypto = require('crypto');
... ...
this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');

而且我已经注册了用户。

昨天更新了npm,现在报错:

events.js:182
      throw er; // Unhandled 'error' event
      ^

TypeError: The "digest" argument is required and must not be undefined
    at pbkdf2 (crypto.js:635:11)
    at Object.exports.pbkdf2Sync (crypto.js:628:10)
    at model.UserSchema.methods.validPassword (/opt/myapp/models/Users.js:35:23)
    at /opt/myapp/config/passport.js:16:23
    at model.Query.<anonymous> (/opt/myapp/node_modules/mongoose/lib/model.js:3745:16)
    at /opt/myapp/node_modules/kareem/index.js:277:21
    at /opt/myapp/node_modules/kareem/index.js:131:16
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

那么有人知道我应该向crypto.pbkdf2Sync 提供什么digest 参数吗?我希望注册的用户/密码仍然有效。

【问题讨论】:

  • 您可以使用require('crypto').getHashes()获取支持的摘要算法数组

标签: node.js npm pbkdf2


【解决方案1】:

来自 crypto.pbkdf2Sync 的 node.js 文档:

const crypto = require('crypto');
const key = crypto.pbkdf2Sync('secret', 'salt', 100000, 512, 'sha512');
console.log(key.toString('hex'));  // '3745e48...aa39b34'

您还需要指定编码算法sha512 这是digest parameter 请参阅文档中的最后一个参数。

【讨论】:

  • 我试过this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, "hex").digest('hex'),还是不行。
  • 你使用的是什么版本的节点?
  • node --version 返回v8.4.0
  • sha512 对我不起作用,而“SHA1”适用:this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, 'SHA1').toString('hex')
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 2023-01-28
  • 2012-06-12
  • 1970-01-01
相关资源
最近更新 更多