Cryptographer TypeError:第一个参数必须是一个字符串
问题描述:
所以我试图为一些pincode /密码散列创建一个单元测试。我早先遇到过这个错误,但是后来我用一个简单的.toString()
解决了这个问题,但现在看起来并不奏效。Cryptographer TypeError:第一个参数必须是一个字符串
这是我的一些代码相关的方法:
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
。变量iterations
和keyLength
来自常量文件。所以这也不是问题。
我希望有人能指引我正确的方向
编辑:
这是整个getHashPincode
:
Pincode.getHashedPincode = async (pincode, salt) => {
return cryptographer.getPasswordHash(pincode, salt);
};
答
没有什么错pin.toString()
。
是什么造成的误差new Buffer(salt, 'hex')
,因为你指定的编码(十六进制),那么第一个参数(盐)必须是一个字符串。 salt.toString()
应该诀窍
+1
你是我的英雄,我完全错过了那个。但它似乎确实起作用! – Bas
你能告诉我们'getHashedPincode'吗? – taha
我编辑了这个职位 – Bas