2016-10-24 10 views
0

嘿由于某些原因我得到这个错误not a valid sha512_crypt hash每当我尝试登录我的登录页面。不是有效的sha512_crypt哈希Python烧瓶错误

件注册页面:

   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 在我的DB有加密的密码,所以我的sha256加密理论上工作。

+0

“数据”的外观如何?你可以使用密码'密码'的帐户并发布哈希? – Blender

+0

你是什么意思? 'data'就是那个SQL查询和那个'fetchone()' – Julian

+0

你怎么知道'data'包含一个有效的散列? – Blender

回答

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) 
+0

我现在收到2个错误。 '散列无法识别' – Julian

+0

和:''ImmutableMultiDict'对象不可调用' – Julian

+0

@ Julian:没有上下文,这些错误是没有意义的。请提取有问题的代码,使其具有一定的独立性:https://stackoverflow.com/help/mcve – Blender