#python #multithreading
Вопрос:
Я совершаю атаку по словарю с хэшами SHA-256 из Violent Python, и у меня есть функция, которая проверяет хэш и проверяет, соответствует ли он паролю. Тогда у меня есть функция main ().
Программа открывает файл словаря и таблицу в стиле UNIX с пользователями и их хэш-паролями. Я использую потоки для проверки всех слов сразу и использую цикл for для их проверки:
from hashlib import *
from os import chdir
from pathlib import Path
from threading import Thread
from time import sleep
chdir(Path.home() / 'Downloads')
dict = open('dictionary.txt')
def test(encrypted):
for word in dict.readlines():
hash = sha256()
word = word.strip('n')
hash.update(bytes(word))
if hash.hexdigest() == encrypted:
print('Match!:' word)
else:
return null
def main():
users = open('users.txt')
for line in users.readlines():
user = line.split(':')[0]
encrypted = line.split(':')[1].strip(' ')
print('cracking for' user '...')
t = Thread(target = test, args = encrypted)
t.start()
main()
sleep(200)
Python выдает мне эту ошибку, хотя:
TypeError: test() takes 1 positional argument but 64 were given
Я думаю, что Python думает, что я пытаюсь проверить все словарные слова сразу, но это невозможно, потому что в моем словаре нет 64 слов, но я не могу найти в коде ничего неправильного.
apple
orange
egg
lemon
grapes
secret
strawberry
password
Вот это users.txt:
victim: 34707c3f40dfa20c3902b807b627d420d6d474d9d98066ba637953d1cfd6b914: 503:100:Iama Victim:/home/victim:/bin/sh
root: 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b: 504:100: Markus Hess:/root:/bin/bash
Комментарии:
1.
encrypted
имеет длину 64 символа, вы должны прочитать, чтоargs
означает, когда вы создаетеThread
: docs.python.org/3/library/threading.html#threading. Нитки2. @jonrsharpe Так мне следует поместить его в кортеж?
3. Попробуйте; имеет ли это какое-то значение?
4. @jonsharpe Да, это так. Но по какой-то причине это работает только тогда, когда я ставлю запятую после этого, как написал copyrighttc. Спасибо!
5. Запятая-это то, что делает его кортежем , если бы вы просто сделали
args=(encrypted)
это, это не имело бы никакого значения.
Ответ №1:
Ключевое слово args потока принимает кортеж
Это может сработать :
t = Thread(target = test, args = (encrypted,))
Кроме null
того, в python нет ничего подобного, но none