2017-10-06 131 views
1

所以我试图为一些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。变量iterationskeyLength来自常量文件。所以这也不是问题。

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

编辑:

这是整个getHashPincode

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

你能告诉我们'getHashedPincode'吗? – taha

+0

我编辑了这个职位 – Bas

回答

0

没有什么错pin.toString()

是什么造成的误差new Buffer(salt, 'hex'),因为你指定的编码(十六进制),那么第一个参数()必须是一个字符串。 salt.toString()应该诀窍

+1

你是我的英雄,我完全错过了那个。但它似乎确实起作用! – Bas

相关问题