Cryptographer TypeError:第一个参数必须是一个string
所以我想创build一个pincode /密码散列的unit testing。 我之前遇到过这个错误,但是后来我用一个简单的.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
命名约定外, variablesiterations
和keyLength
来自一个常量文件。 所以这也不是问题。
我希望有人能带领我走向正确的方向
编辑:
这是整个getHashPincode
:
Pincode.getHashedPincode = async (pincode, salt) => { return cryptographer.getPasswordHash(pincode, salt); };
pin.toString()
没有错。
是什么导致错误是new Buffer(salt, 'hex')
,因为你指定了一个编码( hex ),那么第一个参数( 盐 )必须是一个string。 salt.toString()
应该做的伎俩