2015-10-14 7 views
3

Я использую фрагмент ниже, чтобы зашифровать пароль пользователя перед сохранением в базе данных.Проверка хэша пароля PBKDF2 в python-pbkdf2

from pbkdf2 import crypt 
pwhash = crypt(password_from_user) 

Пример: $p5k2$$Y0qfZ64u$A/pYO.3Mt9HstUtEEhWH/RXBg16EXDMr

Затем я сохранить это в базе данных. Ну локально, я могу выполнить проверку делать что-то вроде этого:

from pbkdf2 import crypt 
    pwhash = crypt("secret") 
    alleged_pw = raw_input("Enter password: ") 
    if pwhash == crypt(alleged_pw, pwhash): 
     print "Password good" 
    else: 
     print "Invalid password" 

но как выполнить проверку с тем, что на БД как зашифрованная строка не всегда то же самое. Я использую python-pbkdf2.

+0

https://www.dlitz.net/software/python-pbkdf2/ –

+1

Что вы подразумеваете под * «не всегда одно и то же» *? Проверяет ли работа только иногда или всегда работает для некоторых паролей, но не для других? –

ответ

1

Окей, сделал больше исследований и выяснили, что для достижения этой цели, я сначала зашифровать пароль и сохранить в db.as:

pwhash = crypt("secret",iterations=1000) 

, который может производить строку как $p5k2$3e8$her4h.6b$.p.OE5Gy4Nfgue4D5OKiEVWdvbxBovxm

и для проверки, когда пользователь хочет войти в систему с тем же паролем, я использую функцию ниже:

def isValidPassword(userPassword,hashKeyInDB): 
    result = crypt(userPassword,hashKeyInDB,iterations = 1000) 
    return reesult == hashKeyInDB #hashKeyInDB in this case is $p5k2$3e8$her4h.6b$.p.OE5Gy4Nfgue4D5OKiEVWdvbxBovxm 

этот метод возвращает True если пароль са me или False, если в противном случае.