38 votes

Comment comparer un mot de passe en texte brut à un mot de passe haché en utilisant bcrypt ?

Je voudrais utiliser bcrypt pour hacher les mots de passe et vérifier plus tard si un mot de passe fourni est correct.

Le hachage des mots de passe est facile :

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

64voto

user1581840 Points 656

Avec le 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 un 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
>>>

6voto

Amber Points 159296

Plus tard, disons que vous avez un mot de passe d'entrée utilisateur user_pass. Vous le hacherez également, puis comparerez le hachage avec le hachage stocké, et s'ils correspondent, alors les mots de passe d'origine correspondent également.

Notez que bcrypt stocke automatiquement la valeur de Salt dans le mot de passe haché, afin que vous puissiez l'utiliser lorsque vous hacherez également l'entrée future.

Première visite :

import bcrypt

password = u'foobar'
salt = bcrypt.gensalt()
password_hashed = bcrypt.hashpw(password, salt)

# store 'password_hashed' in a database of your choosing

Plus tard :

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

4voto

Je ne connais pas Python mais je pense que vous pouvez utiliser :
public static booléen checkpw(java.lang.String plaintext, java.lang.String hashed)

# 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"

0voto

nisrine hammout Points 15

Je pense que celui-ci fonctionnera mieux :

for i in range(len(rserver.keys())):
    salt = bcrypt.gensalt(12)
    
    mdp_hash = rserver.get(rserver.keys()[i])
    rserver.set(rserver.keys()[i], bcrypt.hashpw(mdp_hash.encode(),bcrypt.gensalt(12) ))

    rsalt.set(rserver.keys()[i], salt)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X