2015-11-22 6 views
1

У меня есть проблема разбора строки из файла в passlib.hash.sha512_crypt.encrypt()Python - passlib

Мой код это:

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

в файле у меня есть это :

password 
123456789 
987654321 

я знаю, что раунды по умолчанию для Linux пароля, например 5000, но в моем сценарии, когда он попытаться зашифровать слово пароля с солью saltsalt он выходной

$6$saltsalt$YslT1fZBE1gwV0EkEo6UdHwwyL8M/EiBeNfZyr7TZcKxAUd0QkMaP8jmfarPGYVaNUy6haNbxsh6RKsm6dzP81 

, но когда я запускаю его из питона оболочки я получил

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

Почему они не совпадают?

ответ

0

Первый хэш вы вывесили ("...$YslT1...") на самом деле хэш "password\n", не "password", потому что итерация в дескриптор файла (l) возвращает строки, которые включают в себя любые символы перевода строки. Дешевое решение - сделать l = l.rstrip().