我正在调用bcrypt.checkpw
以检查未加密的密码是否与存储在凭据数据库中的哈希密码匹配,但接收
TypeError: Unicode-objects must be encoded before checking
我该如何解决这个问题?有什么建议吗?
我安装了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
并收到以下错误:
File "/home/qt/virtualenv/lib/python2.7/site-packages/bcrypt/init.py", line 100, in checkpw
raise TypeError("Unicoed-objects must be encoded before checking")
TypeError: Unicode-objects must be encoded before checking
我调查过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")
你可以这样做
很简单
我假设您使用Python 3。在Python 3中,默认情况下,字符串是unicode字符串。
如果使用unicode值调用
bcrypt.checkpw()
函数:你会得到这个例外
原因很简单:加密函数只对字节字符串(或者实际上是数组)起作用。
密码和哈希密码必须都是字节字符串。
如果您使用
bcrypt.hashpw()
函数,那么您的散列密码必须是字节字符串,我认为问题在于password值。这个密码必须来自类似的HTML表单。要使用bcrypt.checkpw()
函数,必须首先使用与使用bcrypt.hashpw()
函数加密密码时使用的相同编码对字符串值进行编码。通常,我们选择“utf8”编码。例如(Python 2&3):
请参阅Gihub page上的简单用法
我用那种东西
相关问题 更多 >
编程相关推荐