Python 尝试使用hashlib和flask散列用户名并将其存储在数据库中

Python 尝试使用hashlib和flask散列用户名并将其存储在数据库中,python,flask-sqlalchemy,hashlib,Python,Flask Sqlalchemy,Hashlib,我正在尝试使用hashlib散列一个用户名,在将其提交到数据库之前,我从表单中获取该用户名 代码: 它给了我一个错误:绑定参数2时出错-可能是不支持的类型。散列和存储一个值应该相对容易,所以我真的不确定哪里出错了。我也遵循了hashlib上的文档 任何帮助都将不胜感激 编辑:在玩了一会儿之后,我设法想出了一个不同的错误。我将哈希代码更改为如下所示: hashedusername = hashlib.sha256(str('username')) #create new

我正在尝试使用hashlib散列一个用户名,在将其提交到数据库之前,我从表单中获取该用户名

代码:

它给了我一个错误:绑定参数2时出错-可能是不支持的类型。散列和存储一个值应该相对容易,所以我真的不确定哪里出错了。我也遵循了hashlib上的文档

任何帮助都将不胜感激


编辑:在玩了一会儿之后,我设法想出了一个不同的错误。我将哈希代码更改为如下所示:

hashedusername = hashlib.sha256(str('username'))
            #create new user using User schema
            new_account = Account(email=email, username=hashedusername, password=generate_password_hash(password1, method='sha256'))
回溯:

Traceback (most recent call last):
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/nicholas/Documents/CY 324 Web App/website/auth.py", line 71, in signup
    hashedusername = hashlib.sha256(str('username'))
TypeError: Unicode-objects must be encoded before hashing

我认为您应该使用hashlib.sha256(username.encode('utf-8')).hexdigest()。函数返回一个哈希对象,从中提取摘要。请参阅上面的注释:我也这样做了,生成了一个“字符串”,您的绑定很可能会检查该字符串。对不起,您是说
hexdigest()
是作为字符串的哈希值吗?因此,
hashlib.sha256()
返回的哈希对象不是字符串?你的解决方案成功了,所以还是谢谢你:)@Nicholas你的数据库需要一个字符串
hashlib.sha256
返回哈希对象。函数
hexdigest
将摘要作为字节对象查询,并将其转换为十六进制字符串。
hashedusername = hashlib.sha256(str('username'))
            #create new user using User schema
            new_account = Account(email=email, username=hashedusername, password=generate_password_hash(password1, method='sha256'))
Traceback (most recent call last):
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/nicholas/.local/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/nicholas/Documents/CY 324 Web App/website/auth.py", line 71, in signup
    hashedusername = hashlib.sha256(str('username'))
TypeError: Unicode-objects must be encoded before hashing