Словарная атака на хэш SHA1

Ниже мой код. Я пытался исправить код, чтобы выполнить словарную атаку на хеш (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'

2 ответа

Решение

Эта строка не является допустимым синтаксисом Python3: (РЕДАКТИРОВАТЬ: это правильный синтаксис! Но не то, что вы хотите:))

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

Используйте это вместо:

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

Также, согласно сообщению об ошибке, строка может быть None.

Вы используете 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))
Другие вопросы по тегам