2016-10-24 2 views
0

안녕하세요 어떤 이유로 로그인 페이지에 로그인 할 때마다 not a valid sha512_crypt hash이 오류가 발생합니다. 등록 페이지의유효한 sha512_crypt 해시 파이썬 플라스크 오류

조각 : 내 로그인 페이지

   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) 

조각 : not a valid sha512_crypt hash 에서 : 내 DB에서 사용자 이름과 암호를 입력 할 때

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 

그래서 오류가 발생합니다 내 DB에는 암호화 된 암호가 있으므로 내 sha256 암호화가 이론적으로 작동합니다.

+0

'데이터'는 어떻게 생겼습니까? 암호'password'로 계정을 만들고 해시를 게시 할 수 있습니까? – 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

@ 줄리아 : 컨텍스트가 없으면 이러한 오류는 의미가 없습니다. 문제가있는 코드를 약간 자체적으로 포함 시키십시오. https://stackoverflow.com/help/mcve – Blender