【问题标题】:not a valid sha512_crypt hash Python Flask Error不是有效的 sha512_crypt 哈希 Python Flask 错误
【发布时间】:2016-10-25 02:02:38
【问题描述】:

嘿,由于某些原因,我每次尝试登录我的登录页面时都会收到此错误not a valid sha512_crypt hash

注册页面:

                username = request.form['username']
                password = sha512_crypt.encrypt((str(request.form['password'])))
                email = request.form['email']

                cur.execute("INSERT INTO users (name,password,email) VALUES (?,?,?)",(username,password,email)

我的登录页面片段:

data = cur.execute("SELECT password FROM users WHERE name= ?", (request.form['username'],))

                data = cur.fetchone()[0]

                if sha512_crypt.verify(request.form['password'], data):
                    session['logged_in'] = True
                    session

                  #etc #etc #etc

所以当我从我的数据库中填写用户名和密码时,我得到一个错误: not a valid sha512_crypt hash 在我的数据库中有加密密码,所以我的 sha256 加密理论上可以工作。

【问题讨论】:

  • data 看起来像什么?你能用密码password创建一个帐户并发布哈希吗?
  • 什么意思? data就是那个 SQL Query 和那个 fetchone()
  • 你怎么知道data 包含一个有效的哈希?
  • 我假设它包含一个有效的哈希值,因为它是从我的数据库中选择的。
  • 我知道,但是您能否发布 repr(data) 显示的内容和相应的密码,以便您可以确定在数据库中存储了有效的密码哈希?

标签: python flask sha256


【解决方案1】:

您的数据库中使用sha256_cryptsha512_crypt 创建了密码哈希,但您使用sha512_crypt 来验证两者。那是行不通的。

要么为使用sha256_crypt 创建的哈希(它们以$5$ 开头)重新创建用户密码,要么使用passlib.apps.custom_app_context 验证两者。以下是来自the docs 的示例:

# import the context under an app-specific name (so it can easily be replaced later)
from passlib.apps import custom_app_context as pwd_context

# encrypting a password...
hash = pwd_context.encrypt("somepass")

# verifying a password...
ok = pwd_context.verify("somepass", hash)

【讨论】:

  • 我现在遇到 2 个错误。 hash could not be identified
  • 和:'ImmutableMultiDict' object is not callable
  • @Julian:没有上下文,这些错误毫无意义。请将有问题的代码提炼成有点独立:stackoverflow.com/help/mcve
  • 将 sha512 加密更改为 passlib.apps。事物。 if pwd_context.verify(request.form['password'], data): 并在我的用户注册表单中:password = pwd_context.encrypt((str(request.form['password']))) 现在不知何故我设法得到了我的闪存,它闪烁(“成功登录”)但它仍然给我一个错误。这是我按下登录后得到的:Successfully logged in 'function' object has no attribute '__getitem__' 在我的登录页面代码中,我在 flash 后面放了一个 return redirect(url_for(hello))
  • 我把我的从加密改成散列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2020-04-08
相关资源
最近更新 更多