使用 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.passwordhashed.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 (将#修改为@)