【问题标题】:Flask sha256_crypt.verify returning `not a valid sha256_crypt hash`烧瓶 sha256_crypt.verify 返回“不是有效的 sha256_crypt 哈希”
【发布时间】:2019-10-31 21:59:02
【问题描述】:

我正在将 Flask 用于 Web 登录页面。我正在尝试利用 sha256 密码加密,但我不知道为什么行 sha256_crypt.verify(password,pass_data) 会抛出标题错误。

我有什么遗漏吗?如果我可以提供更多详细信息,请询问,也许提供一些有关如何调试的说明。谢谢。

@app.route("/login", methods=["GET","POST"])
def login():
   if request.method == "POST":
      username= str(request.form['username'])
      password = request.form.get('password')
      cursor = mydb.cursor(MySQLdb.cursors.DictCursor)
      cursor.execute("SELECT * FROM user WHERE username ='"+ username +"'")
      userdata = cursor.fetchone()
      usernamedata = userdata['username']
      passworddata = userdata['password']
      if usernamedata is None:
        flash("Incorrect username","danger")
        return render_template("login.html")
     else:
        for pass_data in passworddata:
            if sha256_crypt.verify(password,pass_data):
                flash("You are now login","success")
                return redirect(url_for('profile'))
            else:
                flash("Incorrect password!")
                return render_template("login.html")
   return render_template("login.html")

【问题讨论】:

  • 我觉得大家看到实际的错误信息会很方便,这样你就不用去猜测是哪一行抛出了异常。
  • 欢迎来到 Stack Overflow!我编辑了您的问题的标题以包含您正在调用的函数的名称,因此更多了解该主题的人会看到它。有关格式化的更多信息,请参阅编辑帮助。请在您遇到的特定错误消息中进行编辑,以防有必要识别特定问题。祝你好运!

标签: python mysql flask sha256 password-encryption


【解决方案1】:

假设密码数据是一个字符串,执行for pass_data in passworddata 只会遍历字符串的字母。我想改变这个:

for pass_data in passworddata:
    if sha256_crypt.verify(password,pass_data):
        flash("You are now login","success")
        return redirect(url_for('profile'))
    else:
        flash("Incorrect password!")
        return render_template("login.html")

到这里:

if sha256_crypt.verify(password, passworddata):
    flash("You are now login","success")
    return redirect(url_for('profile'))
else:
    flash("Incorrect password!")
    return render_template("login.html")

应该修复它。

另外,不要这样执行 SQL!

cursor.execute("SELECT * FROM user WHERE username ='"+ username +"'")

很容易出现SQL injection

【讨论】:

  • 感谢您的评论。我设置了您的代码,但仍然出现错误。现在错误显示了 - ValueError: expected sha256_crypt hash, got sha256_crypt config string instead
  • 你如何在数据库中存储密码?
  • 这里是注册部分: if request.method=="POST": username = str(request.form["username"]) email = str(request.form["email"])密码 = str(request.form["password"]) pwd_hash = sha256_crypt.encrypt(password) conpassword =str(request.form["conpassword"]) if password == conpassword: cursor = mydb.cursor() cursor.execute ("INSERT INTO user(,username,email,password) VALUES(%s,%s,%s)",(username,email,pwd_hash)) mydb.commit()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
相关资源
最近更新 更多