web-dev-qa-db-fra.com

Comment comparer le mot de passe en texte brut au mot de passe haché en utilisant bcrypt?

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é?

35
MFB

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
>>>
59
user1581840

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"

http://www.mindrot.org/projects/py-bcrypt/

14
user317033

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
5
Amber

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"
4
Govind Singh