【问题标题】:why bcryptjs compare gives null value even though hash used is generated one?为什么即使生成了使用的哈希值,bcryptjs 比较也会给出空值?
【发布时间】:2021-06-08 04:15:48
【问题描述】:

出于身份验证的目的,当我尝试比较相同字符串的密码时,我将哈希密码存储在 MongoDB 中,bcryptjs 会抛出空值。

它以二进制形式存储字符串“123”的哈希密码。 这是我的生成代码

import bcrypt
salt = bcrypt.gensalt()    
password = bcrypt.hashpw(request.form['password'].encode('utf-8'), salt)

当我尝试将此与用户输入的密码“123”进行比较时,我得到一个空值。

123 $2b$12$URN6pyD4SsOgIXALvr.jIuy2hvxlxva.ioamDNtMhAwvWb9/nLdhO null

这是我使用 bcryptjs 的 nodejs 代码,用于比较用户密码和散列数据库密码

userSchema.methods.comparePassword = function (passw, cb) {
    var user = this;
    console.log((passw === user.password) ? 'passwords match' : 'passwords dont match' );
    console.log(passw +" "+ user.password )
    bcrypt.compare(passw, user.password, function (err, isMatch) {
        console.log(passw +" "+ user.password +" " +isMatch )
        if(err) {
            return cb(err)
        }
        cb(null, isMatch)
    })
}

即使我输入了相同的字符串“123”,我也会得到一个空值如果我尝试使用这个在线 bcryptchecker 网站https://bcryptgenerator.com/ 进行检查,我会得到一个匹配项。我到底在做什么错?有人能指出我的错误吗?

【问题讨论】:

  • 用于生成我正在使用 python bcrypt 并将其保存在数据库中并检查我正在使用 bcrypt 比较。检查编辑的问题

标签: javascript python node.js hash bcrypt


【解决方案1】:

我认为您在将数据发送到“bcrypt.compare”方法时犯了错误。你应该做出改变:

bcrypt.compare(user.password, 'password from database')
    .then(status => console.log(status))
    .catch (e) {
        console.log(`Error: ${e}`);
     }

更多详情请查看this

【讨论】:

  • 不,我按正确的顺序发送,即用户输入密码,然后是来自数据库的哈希密码
猜你喜欢
  • 2015-03-09
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
相关资源
最近更新 更多