如何解决使用 bcrypt 在 python 上散列密码
我正在尝试通过基于 FastAPI
的后端服务器创建身份验证系统。
但是我目前在尝试登录用户时遇到 bcrypt 问题,用户在 post 调用中发送的散列密码永远不会等于存储在数据库中的密码。
这是我用来注册用户的代码:
@app.put('/users')
def createuser(user: createuser):
salt = bcrypt.gensalt()
hashed = bcrypt.hashpw(user.password.encode('utf-8'),salt)
if dbUser.find_one({"username":user.username}) is None:
user.password = hashed.decode('utf-8')
print(user)
dbUser.insert_one(bson.son.soN(user))
return {"message":"success"}
else:
return {"error":"user already exists!"}
关于保存新的 user.password
。 hashed.decode('utf-8')
帮助我在数据库中保存一个普通字符串,而不是通过执行 " u'hashed_string' "
或 str(hashed)
获得的 Binary("hashed_string",0)
,我通过将 user.password 保存为 {{1 }} 没有 str 或解码。
hashed
我正在比较 dbPassowrd 编码,因为它是一个字符串,所以它会变成 @app.post('/users')
def loginUser(user: loginUser):
if dbUser.find_one({"username":user.username}) is None:
return {"error":"user not found"}
else:
salt = bcrypt.gensalt()
hashed = bcrypt.hashpw(user.password.encode('utf-8'),salt)
dbPassword = dbUser.find_one({"username":user.username})['password'].encode('utf-8')
if bcrypt.checkpw(dbPassword,hashed):
return {"message":"success!"}
else:
print("does not match")
return {"message":"wrong password!"}
和在 post 调用中发送的散列和编码的密码,这将是 u'hashed_password'
问题是用户发送的密码,经过加密和编码后,不等于数据库中的密码。我做错了什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。