我正在调用 bcrypt.checkpw
检查未加密的密码是否与存储在凭证数据库中的散列密码匹配,但收到
TypeError:Unicode 对象必须在检查前编码
我应该如何解决这个问题?有什么建议吗?
我安装了 python 2.7.6
和 bcrypt 3.1.1
我有以下代码:
def check_password(password, hashed_password)
if not bcrypt.checkpw(password, hashed_password):
raise InvalidCredentials("403 Forbidden")
else:
return true
并收到以下错误:
文件“/home/qt/virtualenv/lib/python2.7/site-packages/bcrypt/ init .py”,第 100 行,在 checkpw
raise TypeError(“Unicoed-objects must be encoded before checking”)
TypeError:Unicode 对象必须在检查前编码
我调查了 bcrypt/__init__.py
,但我不确定为什么
def checkpw(password, hashed_password):
if (isinstance(password, six.text_type) or
isinstance(hashed_password, six.text_type)):
raise TypeError("Unicode-objects must be encoded before checking")
原文由 user7153744 发布,翻译遵循 CC BY-SA 4.0 许可协议
我假设您使用 Python 3。在 Python 3 中,字符串默认为 unicode 字符串。
如果您使用 unicode 值调用
bcrypt.checkpw()
函数:你会得到这个例外
原因很简单:加密函数仅适用于字节字符串(实际上是数组)。
您的 password 和 _hashedpassword 必须都是字节串。
如果您使用
bcrypt.hashpw()
函数,您的 _hashedpa ssword 必须是字节字符串,我认为问题出在 密码 值上。此 密码 必须来自类似的 HTML 形式。要使用bcrypt.checkpw()
函数,您必须首先使用与使用bcrypt.hashpw()
函数加密 密码 时相同的编码对字符串值进行编码。通常,我们选择’utf8’编码。例如(Python 2 和 3):
在 Gihub 页面 上查看简单用法