【问题标题】:Bcrypt - Unicode-objects must be encoded before checkingBcrypt - Unicode 对象必须在检查之前进行编码
【发布时间】:2017-10-30 18:07:04
【问题描述】:

以下代码引发TypeError: Unicode-objects must be encoded before checking

if request.form['username'] == admin[0][0]:
    if bcrypt.checkpw(request.form['password'].encode('utf-8'), admin[0][1]):
        print('checked')

但这部分代码返回True,因此打印checked

if request.form['username'] == username[0][0]:
    if bcrypt.checkpw(request.form['password'].encode('utf-8'), username[0][1]):
        print('checked')

admin & username 是来自 SQLite 数据库的查询,它们返回一个包含元组的列表(即[('username')]

这两个 sn-ps 几乎相同,并且都在进行编码。所以我不确定为什么一个有效而另一个无效。

【问题讨论】:

  • 显然,管理员的哈希密码作为 Unicode 字符串从数据库返回,但用户名的哈希密码不是。我不确定为什么会这样,但将.encode('utf-8') 应用于第二个参数可能会解决此问题。
  • @jasonharper 是的,修复了它!这太奇怪了。不过谢谢!

标签: python unicode


【解决方案1】:

您可以尝试将两个参数都编码为 utf-8,并使用带有 gensalt 的 hashpw

在哪里

user.password 来自 SQLAlchemy db

form.password.data 描述请求中的密码输入

if bcrypt.checkpw(user.password.encode('utf-8'), 
                              bcrypt.hashpw(form.password.data.encode('utf-8'),bcrypt.gensalt())):

【讨论】:

    猜你喜欢
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多