사용자가 사용자 이름과 비밀번호를 제공하는 웹 애플리케이션 등록 시스템을 구축 중입니다. 이 데이터는 postgresql
데이터베이스에 저장됩니다. b'$2b$12$GskbcRCMFHGuXumrNt3FLO'
데이터베이스에서 비밀번호를 가져 오는 방법
가 나는 postgresql
데이터베이스에이 값을 저장하고 - 나는
import bcrypt
hashed = bcrypt.hashpw(PasswordFromWebForm.encode('UTF-8'), bcrypt.gensalt())
이 이런 식으로 뭔가를 보이는 소금 비밀번호를 생성을 다음과 같이 사용자가 입력 한 암호의 소금에 절인 해시를 생성하는 bcrypt을 사용하고 있습니다. 그런 다음 사용자가 시스템에 로그인하려고하면 사용자의 자격 증명을 확인하려고합니다. 이렇게하려면 다음 줄을 따라 뭔가를하려고합니다. -
import psycopg2
conn = psycopg2.connect("dbname=test user=me")
cur = conn.cursor()
saltedpassword = cur.execute("SELECT saltedpassword FROM test WHERE loginid = %s", (LoginIDFromWebForm,))
if bcrypt.hashpw(PasswordFromWebForm.encode('UTF-8'), saltedpassword) == saltedpassword:
print("Success")
이것은 작동하지 않습니다. 다음 TypeError: Unicode-objects must be encoded before hashing
오류가 발생합니다.
내가 대신 그냥 일반 b'$2b$12$GskbcRCMFHGuXumrNt3FLO'
이 "b'$2b$12$GskbcRCMFHGuXumrNt3FLO'"
같은 문자열로 변수 saltedpassword
저장 값이 나는이 문제를 어떻게합니까
(이전의 소금에 절인 비밀번호를 둘러싸는 따옴표를주의) 때문에이 오류가 의심 문제? 데이터베이스에 소금에 절인 해시 암호를 저장하는 가장 좋은 방법은 무엇이며 어떻게 확인을 위해 필요할 때 검색 할 수 있습니까? 다소 긴 질문에 사과드립니다. 제발 도와주세요.
공평하게 bcrypt 문서는'if bcrypt.hashpw (암호, 해시) == 해시 됨 '을 사용하여 암호를 확인합니다. - https://pypi.python.org/pypi/bcrypt/2.0.0 – slim
@slim : 참조 bcrypt 3에 대한 업데이트 된 문서 : https://pypi.python.org/pypi/bcrypt/3.1.2, checkpw()가 3.1.0에 추가되었습니다. –
아 예, 방금 보았습니다. – slim