我正在尝试使用 python (pymongo) 和 bcrypt 为 mongodb 实现登录方法。当我尝试比较哈希时,问题就来了,它们总是不同的:$。
这是我的测试代码(首先我把一个密码散列的用户放入 mongodb):
使用蟒蛇 scrypt :
bcrypt.hashpw('testpassword', bcrypt.gensalt(12))
'$2a$12$K1hnCm5z74QtXaynv4.S8.i1FK9xjRr7JSPCRCyB9zpv8xZznZGFi'
db.users.insert({username: "yichuan",password: "$2a$12$K1hnCm5z74QtXaynv4.S8.i1FK9xjRr7JSPCRCyB9zpv8xZznZGFi" });
一旦我们将它放入数据库中,我正在尝试创造魔法:D:
def test_connectionManagerLoginPass(self):
connectionmanager=dbconnection.ConnectionManager()
username='yichuan'
password='testpassword'
hashed = bcrypt.hashpw(password, bcrypt.gensalt(12))
self.assertIsNotNone(connectionmanager.login(username,hashed), 'No error espected in login')
但是当我看到哈希值时问题就来了:
'$2a$12$hw1DaWdOf3ECBcSgu2GB4Of3oAdKvyzl0xftBVzbyqkjK2A3X.LOm'
这和我之前生成的完全不同!!!. 另外我一直在阅读我不需要保存 bcrypt.gensalt(12) 。所以我有点困惑。
感谢阅读,对我的身份验证实施有什么问题有什么帮助吗?
posdata(更多代码):
def login(self,username,password):
if self.loginfieldsfilter(username,password):
dbdata = self.users.find_one({'username': username})
if password == dbdata[ 'password' ]:
return True
else:
return None
else:
return None
是的,我确信数据库给了我正确的字段。