2016-10-24 11 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