首页 > 解决方案 > ValueError:不是有效的 sha256_crypt 哈希

问题描述

我正在处理这个应用程序,我已经设置了一个注册和登录页面。一切正常,唯一的问题是密码验证。我正在使用 SHA256,每次尝试记录时都会出现此错误:ValueError: not a valid sha256_crypt hash这是一段 def 寄存器

def register():
    if request.method=="POST":
        name = request.form.get("name")
        username = request.form.get("username")
        password = request.form.get("password")
        confirm = request.form.get("confirm")
        secure_password = sha256_crypt.encrypt(str(password))
这是一个登录名

def login():
    if request.method == "POST":
        username = request.form.get("username")
        password = request.form.get("password")
      
        usernamedata = db.execute("SELECT username FROM users WHERE username=:username", {"username":username}).fetchone()
        passwordata = db.execute("SELECT password FROM users WHERE username=:username", {"username":username}).fetchone()

        if usernamedata is None:
            flash("No username", "danger")
            return render_template("/login.html")
        else:
              for passwor_data in passwordata:
                if sha256_crypt.verify(password,passwor_data):
                    flash("You are now logged in","success")
                    return redirect("/index.html")

标签: pythonauthenticationflasksha256flask-login

解决方案


您正在遍历哈希中的每个字符for passwor_data in passwordata:,因此它会引发此错误,并抱怨第二个参数不是有效的 sha256 哈希。

它应该是这样的:

if sha256_crypt.verify(password, passwordata):
    flash("You are now logged in","success")
    return redirect("/index.html")
  • 密码是从用户输入接收的明文密码
  • passwordata 是 sha256 哈希

简短的例子:

from passlib.hash import sha256_crypt

password = "test"
passwordata = sha256_crypt.encrypt(password)

if sha256_crypt.verify(password, passwordata):
    print("OK")

推荐阅读