【问题标题】:Cryptographer TypeError: First argument must be a stringCryptographer TypeError:第一个参数必须是字符串
【发布时间】:2017-10-06 10:09:14
【问题描述】:

所以我正在尝试为一些密码/密码散列创建一个单元测试。我之前也遇到过这个错误,但后来我可以用一个简单的.toString() 解决它,但现在这似乎不起作用。

这是我的一些与方法相关的代码:

pin.model.spec.js:

let pin = Math.floor(1000 + Math.random() * 9000);
let hash = await Pincode.getHashedPincode(pin.toString(), salt);

crypto.js:

function getPasswordHash(password, salt) {
  return new Promise((resolve, reject) => {
    crypto.pbkdf2(password, new Buffer(salt, 'hex'), iterations, keyLength, 'SHA1', (err, result) => {
      if (err) {
        return reject(err);
      }
      return resolve(result.toString('hex'));
    });
  });
}

不用担心方法名不一致,在它们之间有一个名为getHashedPincode 的方法,它什么也不做,只是为了命名约定而调用getPasswordHash。变量 iterationskeyLength 来自常量文件。所以这也不是问题。

希望有人能引导我走向正确的方向

编辑:

这是整个getHashPincode

Pincode.getHashedPincode = async (pincode, salt) => {
  return cryptographer.getPasswordHash(pincode, salt);
};

【问题讨论】:

  • 你能告诉我们getHashedPincode吗?
  • 我编辑了帖子

标签: javascript node.js ecmascript-6 es6-promise


【解决方案1】:

pin.toString() 没有错。

导致错误的原因是 new Buffer(salt, 'hex'),因为您指定了编码 (hex),所以第一个参数 (salt) 必须是字符串。 salt.toString() 应该可以解决问题

【讨论】:

  • 你是我的英雄,我完全错过了。但它似乎确实有效!
猜你喜欢
  • 2018-09-14
  • 2020-05-05
  • 2019-11-04
  • 2018-02-07
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多