2014-07-18 5 views
0

Je dois déplacer la vérification d'origine php auth vers python3. J'ai le code comme ceci:PHP Bcrypt passer à Python3

// hash from db 
$hash = "$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e"; 

// the hash is used as salt 
$result = crypt($password, $hash); 

//result should match the hash if pasword is correct 
$result = "$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e"; 

Il est fait avec un coût de paramètre = 14

Quelle est la meilleure lib pour la mettre en œuvre dans python3?

EDITED: J'ai utilisé lib py-bcrypt.

>>> import bcrypt 
>>> password = "ahoj" 
>>> db_hash = "$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e" 
>>> computed_hash = bcrypt.hashpw(password, db_hash) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Invalid salt 

Pourquoi le sel est-il invalide?

En PHP, il fonctionne:

password=ahoj 
hash=$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e 
result=$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e 

Ce qui est différent en python?

+0

C'est un hachage bcrypt standard, toute bibliothèque le gérera. –

Répondre

1

Si vous voulez comparer les mots de passe, utilisez la fonction checkpw au lieu de hashpw:

if bcrypt.checkpw(passsword, db_hash): 
    print "It matches" 
else: 
    print "It does not match" 

Le sel est nécessaire que lorsque vous créez un nouveau hachage:

hashed = bcrypt.hashpw(password, bcrypt.gensalt()) 

Vous pouvez trouver plus de détails dans le fichier README.

+0

Merci pour votre réponse. Cela ne fonctionne toujours pas. J'obtiens ** ValueError: Invalid hashed_password salt ** –

+1

@JoeBobson: remplace "$ 2y" par "$ 2a" - 'py-bcrypt' ne comprend que ce dernier pour le moment. pour la plupart des mots de passe cela ne devrait faire aucune différence. – hop

+0

Oui! C'est tout. Merci beaucoup :-) –