【问题标题】:ValueError: not a valid sha256_crypt hashValueError:不是有效的 sha256_crypt 哈希
【发布时间】:2020-06-13 22:46:19
【问题描述】:

我正在处理这个应用程序,我已经设置了一个注册和登录页面。 一切正常,唯一的问题是密码验证。我正在使用 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")

【问题讨论】:

    标签: python authentication flask sha256 flask-login


    【解决方案1】:

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

    应该是这样的:

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

    简短示例:

    from passlib.hash import sha256_crypt
    
    password = "test"
    passwordata = sha256_crypt.encrypt(password)
    
    if sha256_crypt.verify(password, passwordata):
        print("OK")
    

    【讨论】:

    • 我尝试了您的建议,但没有收到此错误:TypeError: hash must be unicode or bytes, not sqlalchemy.engine.result.RowProxy
    • @BelloCooper 你需要把它转换成字符串然后
    • 我正在尝试这样:if sha256_crypt.verify(password, passwordata(str)):。它现在抛出这个错误 TypeError: 'RowProxy' object is not callable
    • 我不知道这个passwordata(str)
    • 试图将哈希转换回字符串。我认为这就是它的完成方式。让我知道它是否不正确
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2022-07-06
    • 2019-08-27
    • 1970-01-01
    相关资源
    最近更新 更多