Je voudrais utiliser bcrypt
pour hacher les mots de passe et vérifier plus tard si le mot de passe fourni est correct.
Le hachage des mots de passe est simple:
import bcrypt
password = u'foobar'
password_hashed = bcrypt.hashpw(password, bcrypt.gensalt())
# then store password_hashed in a database
Comment comparer un mot de passe en texte brut au hachage stocké?
Avec py-bcrypt, vous n'avez pas besoin de stocker le sel séparément: bcrypt
stocke le sel dans le hachage.
Vous pouvez simplement utiliser le hachage comme sel et le sel est stocké au début du hachage.
>>> import bcrypt
>>> salt = bcrypt.gensalt()
>>> hashed = bcrypt.hashpw('secret', salt)
>>> hashed.find(salt)
0
>>> hashed == bcrypt.hashpw('secret', hashed)
True
>>>
La documentation ne mentionne pas le stockage du sel, elle dit qu'il suffit de:
#Initial generation
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
#Store hashed in your db
#Load hashed from the db and check the provided password
if bcrypt.hashpw(password, hashed) == hashed:
print "It matches"
else:
print "It does not match"
Plus tard, supposons que vous ayez un mot de passe saisi par l'utilisateur user_pass
. Vous devez également hacher cela, puis comparer le hachage avec le hachage stocké, et s'ils correspondent, les mots de passe d'origine correspondent également.
Notez que bcrypt stocke automatiquement la valeur salt dans le cadre du mot de passe haché, afin que vous puissiez également l'utiliser lorsque vous hachez la future entrée.
Première fois:
import bcrypt
password = u'foobar'
salt = bcrypt.gensalt()
password_hashed = bcrypt.hashpw(password, salt)
# store 'password_hashed' in a database of your choosing
Heures tardives:
import bcrypt
password = something_that_gets_input()
stored_hash = something_that_gets_this_from_the_db()
if bcrypt.hashpw(password, stored_hash) == stored_hash:
# password matches
Je ne connais pas Python mais je pense que vous pouvez utiliser:
checkpw booléen statique public (texte clair Java.lang.String, hachage Java.lang.String)
# Check that an unencrypted password matches one that has
# previously been hashed.
if bcrypt.checkpw(plaintext, hashed):
print "It matches"
else:
print "It does not match"