0

我已经设置了 Scrypt 和散列 - KDF - 工作正常。

但是,每当我尝试时,verifyKdf()我都会遇到错误。

返回 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')
     })
4

1 回答 1

1

问题是.toString('base64')被使用了。尽管这本身不是问题,但您必须将其恢复为缓冲区。

要修复它,请使用new Buffer( /* Password */ , 'base64')并如下所示:

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

当使用代替时,此解决方案也可以正常工作base64 hex

于 2016-12-03T10:00:07.373 回答