Javascript Cryptographer TypeError:第一个参数必须是字符串
因此,我试图为一些pincode/密码散列创建一个单元测试。我之前也遇到过这个错误,但后来我用一个简单的Javascript Cryptographer TypeError:第一个参数必须是字符串,javascript,node.js,ecmascript-6,es6-promise,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
.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
之外,什么都不做,只是为了命名约定。变量iterations
和keyLength
来自常量文件。所以这也不是问题所在
我希望有人能把我引向正确的方向
编辑:
这是整个getHashPincode
:
Pincode.getHashedPincode = async (pincode, salt) => {
return cryptographer.getPasswordHash(pincode, salt);
};
pin.toString()
没有问题
导致错误的原因是新缓冲区(salt,'hex'),因为您指定了编码(hex),所以第一个参数(salt)必须是字符串。
salt.toString()
应该可以做到这一点pin.toString()没有什么问题
导致错误的原因是新缓冲区(salt,'hex'),因为您指定了编码(hex),所以第一个参数(salt)必须是字符串。
salt.toString()
应该可以做到这一点你能给我们看一下getHashedPincode
?我编辑了你给我们看的帖子getHashedPincode
?我编辑了帖子你是我的英雄,我完全错过了。但它似乎确实有效!你是我的英雄,我完全错过了。但它似乎确实有效!