2
전자 메일 및 해시 암호가 Postgres 데이터베이스에 있는지 간단한 프로그램이 있습니다.이 암호는 cgi 응용 프로그램이 될 수 있지만 실패하기 때문에 먼저 스크립트로 테스트합니다.) :세부 사항이 정확하게 DB에있을 때 전자 메일과 해시 된 암호가 항상 확인됩니다.
import cgi
import cgitb
import hashlib
import psycopg2
from dbconfig import *
cgitb.enable()
print "Content-Type: text/plain\n\n";
def checkPass():
email = "[email protected]"
password = "mypassword"
password = hashlib.sha224(password.encode()).hexdigest()
result = cursor.execute('SELECT * FROM logins WHERE email=%s AND passhash=%s', (email, password))
print result
if __name__ == "__main__":
conn_string = "host=%s dbname=%s user=%s password=%s" % (host, database, dbuser, dbpassword)
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
checkPass()
이 프로그램은 항상 인쇄시 없음을 반환합니다. 이메일과 해쉬 된 암호가 확실히 데이터베이스에 있습니다. 나는 이것을 다음과 같이 두었다.
email = "[email protected]"
allpass = "mypassword"
password = hashlib.sha224(allpass.encode()).hexdigest()
cursor.execute('INSERT INTO logins (email, passhash) VALUES (%s, %s);', (email, password))
conn.commit()
그리고 db를 확인하면 이메일과 암호가 있음을 알 수있다. 그렇다면 첫 번째 프로그램이 SELECT 문에서 어떤 것을 반환하지 않는 이유는 무엇입니까? 해시는 같은 방식으로 저장되지 않습니까? 어떤 도움이라도 대단히 감사하겠습니다.
'cursor.execute' 호출에 오타가 있습니까? 그게'% (email, password)'일까요? –
두 번째 코드 조각이 없어도 작동한다고 생각하지 않지만'ProgrammingError : column "[email protected]"이 존재하지 않습니다. LINE 1 : SELECT * FROM logins where email = "person @ gmail.com ....' –
좋아요, 마지막 코멘트는 어떻게 전달했는지에 관한 문제였습니다. 안전하지 않은 이스케이프 문자를 사용하도록 쿼리를 변경하는 등의 작업은 여전히 데이터베이스에서 가져 오지 않았습니다. db에 올바른 행을 반환합니다. 그냥 파이썬 프로그램에서 않습니다. –