2015-11-22 34 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 

,但是当我从蟒蛇shell中运行它,我得到

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