【问题标题】:Python bcrypt postgres encoding / decoding issue?Python bcrypt postgres 编码/解码问题?
【发布时间】:2020-07-23 03:52:12
【问题描述】:

我有一个使用 bcrypt 的简单 Flask 应用程序。我在这个简单易用的库上花了几个小时来找出编码问题。 login 方法调用 doDecideHashedPassword 方法,如果凭据匹配,则该方法应返回 true 或 false。

还要注意以下几点

  1. 我使用 postgres,目前我的密码字段设置为 varchar(500)
  2. 我将散列密码转换为 str 以将其准确存储在数据库中。

当我从数据库请求哈希密码并通过下面的 doDecodeHashedPassword 传递它时,我得到无效的盐。这接受来自表单的电子邮件和密码。

def doDecodeHashedPassword(self, email, password):
        getpwd = ClientUser.query.filter_by(email=email).one()
        getpwd = getpwd.password
        getpwd = getpwd.encode()
        password = password
        check_user_integrity = bcrypt.checkpw(password,getpwd)
        if check_user_integrity:
            return (check_user_integrity)
        else:
            return False

为什么我收到无效盐错误。

【问题讨论】:

    标签: python-3.x bcrypt


    【解决方案1】:

    我需要做的就是确保密码的解码格式存储在数据库中。这让我疯狂了一段时间,但现在它已经解决了。

    bcrypt.hashpw(password, bcrypt.gensalt(16)).decode()
    

    根本问题是您需要确保您没有将哈希密码存储在数据库中作为 varchar,因为字符串可能会在 ETL 过程中自动编码。相反,只需使用普通的“TEXT”字段或“CHAR”字段。理想的长度应该是 80 个字符左右。为了安全起见,我只有 100 个字符。

    【讨论】:

      猜你喜欢
      • 2021-09-05
      • 2015-03-15
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多