2015-11-22 2 views
1

j'ai un problème pour analyser une chaîne à partir d'un fichier à passlib.hash.sha512_crypt.encrypt()Python - passlib

Mon code est le suivant:

from passlib.hash import sha512_crypt 

h = input("sha512: ") 
s = input("salt: ") 
d = input("dictionary: ") 

dictionary = open(d, "r") 

for l in dictionary: 
    for i in range(1000,7000): 
     t = sha512_crypt.encrypt(str(l), salt=s, rounds=i) 
     print (t) 
     t = t.replace("rounds=" + str(i) + "$", "") 
     print("[DEBUG] SEARCHING " + str(i) + " USING " + l), 
     if (t == h): 
      print("FOUND AT: " + str(i) + "\nCODE IS: " + l) 
      break 
else: 
    print("NO CODE FOUND") 

dans le fichier que j'ai ce :

password 
123456789 
987654321 

Je sais que les tours par défaut pour le mot de passe linux par exemple est 5000, mais dans mon script, quand il essaie de chiffrer le mot de passe avec le sel saltsalt il sortie

$6$saltsalt$YslT1fZBE1gwV0EkEo6UdHwwyL8M/EiBeNfZyr7TZcKxAUd0QkMaP8jmfarPGYVaNUy6haNbxsh6RKsm6dzP81 

mais quand je le lance de shell python i got

>>> from passlib.hash import sha512_crypt 
>>> sha512_crypt.encrypt("password", salt="saltsalt", rounds=5000) 
'$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/' 

Pourquoi ils ne correspondent pas?

Répondre

0

Le premier hachage que vous avez posté ("...$YslT1...") est en fait le hachage de "password\n", non "password", parce itérer sur une poignée de fichier (l) retourne des lignes qui comprennent tous les caractères de saut de ligne. Une solution bon marché serait de faire l = l.rstrip().