2017-10-06 144 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

相關問題