Cryptographer TypeError:第一个参数必须是字符串

时间:2017-10-06 10:09:15

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

所以我试图为某些pincode /密码哈希创建一个单元测试。我之前也遇到过这个错误,但后来我用一个简单的.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);
};

1 个答案:

答案 0 :(得分:0)

pin.toString()没有任何问题。

导致错误的原因是new Buffer(salt, 'hex'),因为您指定了编码( hex ),因此第一个参数( salt )必须是字符串。 salt.toString()应该做的伎俩