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
它递归地要求该项目。
好的,我有一个 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
它递归地要求该项目。