Bcrypt python 脚本和 JavaScript with MongoDB/Mongoose 不适用于两个单独的项目

Bcrypt python script and JavaScript with MongoDB/Mongoose not working for two seperate items

好的,我有一个 python 脚本可以创建一个特殊帐户:

salt = bcrypt.gensalt(10)
password = (bcrypt.hashpw(password.encode("utf-8"), salt)).decode("utf-8")
pin = (bcrypt.hashpw(pin.encode("utf-8"), salt)).decode("utf-8")

然后我将其存储在 Mongodb 中,如下所示:

data = {
        'username' : username,
        'password' : password,
        'pin'      : pin,
        'created'  : t,
        'last_log' : t,
        'num_fails': 0,
        'systemWidePassword' : '[REDACTED]'
}
result = admins.insert_one(data)

如果我检查 mongo,所有内容都在里面。

我有一个 Mongoose 方法,它使用 bcrypt 和以下代码行检查 pin 和密码:

const [pinMatch, passMatch] = await Promise.all([
    bcrypt.compare(attemptPin, this.pin), 
    bcrypt.compare(attemptPass, this.password)
]);

出于某种原因,我的 passMatch 每次都评估为真(使用正确的密码),但是我的 pinMatch 值在正确的 pin 下总是错误的。 为什么一个可以工作而另一个总是失败?所有字段都作为字符串处理。

解决方案很出乎意料。显然 bcrypt 和“$”符号存在问题。这会导致生成的带有“$”符号的密码导致散列不匹配。在收到任何将通过 bcrypt 运行 的输入后,我将以下内容添加到 python 脚本中:

def checkBcryptString(self, item):
    return item.find('$')

然后如果它 returns True 我接受并且 False 它递归地要求该项目。