Stack Overflow на русском Asked by NeonGhost084 on November 10, 2021
Создаю программу для брута хешей
Входные данные : d8578edf8458ce06fbc5bb76a58c5ca4
, wordlist.txt
, md5
То что должно вывести : qwerty
Ошибка: AttributeError: 'str' object has no attribute 'hexdigest'
Когда убираю .hexdigest()
из кода возникает ошибка : TypeError: can only concatenate str (not "_hashlib.HASH") to str
from colorama import Fore, init
import hashlib
init()
print ('Starting...')
# USER DATA
userhash = input ("Input HASH : ")
userword = input ("Input PassList : ")
useralg = input ("Input Algorithm : ")
# brute
wordlist = open(userword,"r",encoding='utf-8')
for line in wordlist:
hashpass = hashlib.new (useralg)
hashpass.update (line.encode("utf-8"))
if hashpass == userhash:
print (Fore.GREEN + line.hexdigest())
else:
print (Fore.RED + "PassErr", line.hexdigest())
После исправления все равно не работает, вывод программы:
PassErr c4ca4238a0b923820dcc509a6f75849b
PassErr e10adc3949ba59abbe56e057f20f883e
PassErr d8578edf8458ce06fbc5bb76a58c5ca4
Должно вывести qwerty
from colorama import Fore, init
import hashlib
init()
print ('Starting...')
# USER DATA
userhash = input ("Input HASH : ")
userword = input ("Input PassList : ")
useralg = input ("Input Algorithm : ")
# brute
wordlist = open(userword,"r",encoding='utf-8')
for line in wordlist:
hashpass = hashlib.new (useralg)
hashpass.update (line.rstrip('n').encode("utf-8"))
if hashpass == userhash:
print (Fore.GREEN + hashpass.hexdigest())
else:
print (Fore.RED + "PassErr", hashpass.hexdigest())
Как правильно заметил Sergey Gornostayev, вместо line.hexdigest()
должно быть hashpass.hexdigest()
:
from colorama import Fore, init
import hashlib
init()
line = "some text"
useralg = "md5"
hashpass = hashlib.new(useralg)
hashpass.update(line.encode("utf-8"))
print(Fore.GREEN + hashpass.hexdigest())
# Выведет 552e21cd4cd9918678e3c1a0df491bc3 зеленым цветом
Также учитывайте, что строки прочитанные из файла заканчиваются на символ 'n'
, который нельзя ввести через input
, поэтому хеши у вас при всем желании не совпадут. Нужно обрезать перенос строки из считанной строки, потом уже считать хеш:
wordlist = open(userword,"r",encoding='utf-8')
for line in wordlist:
hashpass = hashlib.new (useralg)
# обрезать перенос строки в конце, потом уже кодировать:
hashpass.update (line.rstrip('n').encode("utf-8"))
if hashpass == userhash:
print (Fore.GREEN + hashpass.hexdigest())
else:
print (Fore.RED + "PassErr", hashpass.hexdigest())
По поводу второй ошибки: в Python не все объекты можно складывать между собой с помощью +
. Ошибка говорит, что вы пытаетесь сложить объект строкового типа (Fore.GREEN
- это строка 'x1b[32m'
) с объектом другого типа, что недопустимо. Аналогичная ошибка будет, если попытаться сложить строку с числом:
>>> print(Fore.GREEN + 100500)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
can only concatenate str (not "int") to str
Чтобы устранить ошибку, можно например привести объект к строке:
print(Fore.GREEN + str(100500))
Но в данном случае это не то что вам нужно.
Еще одна проблема: в условии if вы сравниваете объект hashpass (который не является строкой) с введенной пользователем строкой, поэтому условие никогда не выполнится. Чтобы работало правильно, нужно получить из hashpass значение хеша, и его уже сравнивать с введенным хешем.
if hashpass.hexdigest() == userhash:
print (Fore.GREEN + line) # Выводим саму строку, для которой подошел хеш
else:
print (Fore.RED + "PassErr", hashpass.hexdigest())
Answered by insolor on November 10, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP