微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 bcrypt 在 python 上散列密码

如何解决使用 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 举报,一经查实,本站将立刻删除。