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

Bcrypt python脚本和带有MongoDB/Mongoose的JavaScript不适用于两个单独的项目,javascript,python-3.x,mongodb,mongoose,bcrypt,Javascript,Python 3.x,Mongodb,Mongoose,Bcrypt,好的,我有一个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' :

好的,我有一个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
每次计算结果都为true(使用正确的密码),但是我的
pinMatch
值使用正确的pin总是false。
为什么一个可以工作,而另一个总是失败?所有字段都作为字符串处理

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

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

然后,如果它返回
True
I accept,并使用
False
递归地请求项目

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

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

然后,如果它返回
True
I accept,并使用
False
递归地请求项目

什么是
bcrypt
?和
password
pin
不是字符串吗?我的模式将它们存储为字符串。编码适用于密码,bcrypt是一个用于密码哈希等的库。什么是
bcrypt
?和
password
pin
不是字符串吗?我的模式将它们存储为字符串。该编码适用于密码,bcrypt是一个用于密码哈希等的库。