0

以下是我的代码。我一直在尝试修复代码以对哈希(SHA-1)执行字典攻击,我得到以下结果。PS我是编码的初学者。

import hashlib
import random
#plug in the hash that needs to be cracked
hash_to_crack = "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8"
#direct the location of the dictionary file
dict_file = "C:/Users/kiran/AppData/Local/Programs/Python/Python37/dictionary.txt"

def main():
    with open(dict_file) as fileobj:
        for line in fileobj:
            line = line.strip()
            if hashlib.sha1(line.encode()).hexdigest() == hash_to_crack:
                print ("The password is %s") % (line);
                return ""
    print ("Failed to crack the hash!")
    return ""


if __name__ == "__main__":
    main()

结果:

RESTART: C:/Users/kiran/AppData/Local/Programs/Python/Python37/Codes/datest1.py
The password is %s
Traceback (most recent call last):
  File "C:/Users/kiran/AppData/Local/Programs/Python/Python37/Codes/datest1.py", line 20, in <module>
    main()
  File "C:/Users/kiran/AppData/Local/Programs/Python/Python37/Codes/datest1.py", line 13, in main
    print ("The password is %s") % (line);
TypeError: unsupported operand type(s) for %: 'NoneType' and 'str'
4

2 回答 2

2

您正在使用 Python 3,其中print是一个函数。该行:

print ("The password is %s") % (line)

print使用参数调用函数"The password is %s"。函数返回None。然后None % (line)给出你看到的错误信息。

最惯用的方式是这样写:

print("The password is", line)

其他可行的方法:

print("The password is %s" % line)
print(("The password is %s") % (line))
于 2018-04-17T23:56:06.703 回答
-1

此行不是有效的 python3 语法:(编辑:这是一个有效的语法!但不是你想要的 :))

print ("The password is %s") % (line);

改用这个:

print ("The password is %s" % line)

此外,根据错误消息,行可能是无。

于 2018-04-17T23:55:43.460 回答