如何解决来自node-argon2的“TypeError:pchstr必须包含$作为第一个字符”?

Abd*_*zaq 6 passwords node.js

当我尝试验证密码时,我收到了 TypeError 。哈希函数工作正常,但验证不行!这是哈希结果: $argon2i$v=19$m=4096,t=3,p=1$8rKV3QWX0Y8GQ7ChOgVIRw$u+UEaGhG8Rvge4TvG17gnx/6jhdmePh9s7V3aK/asXA 我使用的验证函数:

function comparePassword(candidatePassword){
    try {
        return argon2.verify candidatePassword, user.password
    }
    catch (err) {
        throw err
    }
}
Run Code Online (Sandbox Code Playgroud)

这是哈希函数:

try {
    hash = await argon2.hash(password)
    user.password = hash
    next()
}
catch (err) {
    next(err)
}
Run Code Online (Sandbox Code Playgroud)

我的环境

Archlinux GNOME 版本 3.34.3
NodeJS v11.15.0
Argon2 v0.25.0

小智 13

错误消息给您一个提示:pchstr 必须包含 $ 作为第一个字符。argon2 生成的哈希值的每个编码表示形式的第一部分都是正在使用的 Argon2 的变体,在您的例子中是 argon2i。您的candidatePassword第一个字符可能不是“$”,即使有,您也会遇到其他问题。但这只是一个开始!

如果你仔细观察npm 包中的代码示例,你会发现它是

argon2.verify("<big long hash>", "password")并不是

argon2.verify("password","<big long hash>")正如你所做的那样。

TLDR:交换您的参数以匹配 的参数argon2.verify。