Python - passlib

时间:2015-11-22 16:21:48

标签: python linux sha512 passlib

我在解析文件中的字符串时遇到问题 passlib.hash.sha512_crypt.encrypt()

我的代码是这样的:

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但是在我的脚本中,当他尝试使用salt saltalt 加密单词密码时输出< / p>

$6$saltsalt$YslT1fZBE1gwV0EkEo6UdHwwyL8M/EiBeNfZyr7TZcKxAUd0QkMaP8jmfarPGYVaNUy6haNbxsh6RKsm6dzP81

但是当我从python shell运行它时我得到了

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

为什么他们不匹配?

1 个答案:

答案 0 :(得分:0)

您发布的第一个哈希("...$YslT1...")实际上是"password\n"的哈希,而不是"password",因为迭代文件句柄(l)会返回包含的行任何换行符。一个便宜的修复方法是l = l.rstrip()