2016-12-03 66 views
0

我已經設置了Scrypt和哈希 - KDF - 工作正常。Scrypt在verifyKdf失敗,只是「錯誤」

但是,每當我嘗試verifyKdf()時出現錯誤。

return scryptNative.verifySync(args [0],args [1]); ^

錯誤

在Object.verifyKdfSync(/home/arc/Desktop/scrypt-test/node_modules/scrypt/index.js:331:25)

我的代碼,它哈希。

// a promise chain... 

.then(() => scrypt.kdf(newPassword, scryptParameters)) 
.then(hashedPassword => { 

    user.hashedPassword = hashedPassword.toString('base64') 

    resolve(store.save(user.id, user)) 

}) 

然後驗證:(這裏落入catch()err簡單的包含 「錯誤」)

scrypt.verifyKdf(user.hashdPassword, enteredPassword) 
    .then(result => { 
      if (result) return resolve(user) 
      else return reject('Wrong password') 
    }) 
    .catch(err => { 
      console.log('scrypt verify failed: ', err) 
      return reject('Internal Error') 
    }) 

回答

1

的問題是,​​使用。雖然這本身不是問題,但您必須將其恢復到緩衝區。

要修復它使用new Buffer(/* Password */ , 'base64')和看起來像這樣:

scrypt.verifyKdf(new Buffer(user.hasdPassword, 'base64'), password) 

用該溶液代替base64hex時將正常工作。