我使用Python 2.7,并且我有一个简单的多线程MD5字典破解程序:
# -*- coding: utf-8 -*-
import md5
import Queue
import threading
import traceback
md5_queue = Queue.Queue()
def Worker(queue):
while True:
try:
item = md5_queue.get_nowait()
except Queue.Empty:
break
try:
work(item)
except Exception:
traceback.print_exc()
queue.task_done()
def work(param):
with open('pwds', 'r') as f:
pwds = [x.strip() for x in f.readlines()]
for pwd in pwds:
if md5.new(pwd).hexdigest() == param:
print '%s:%s' % (pwd, md5.new(pwd).hexdigest())
def main():
global md5_queue
md5_lst = []
threads = 5
with open('md5', "r") as f:
md5_lst = [x.strip() for x in f.readlines()]
for m in md5_lst:
md5_queue.put(m) # add md5 hash to queue
for i in xrange(threads):
t = threading.Thread(target=Worker, args=(md5_queue,))
t.start()
md5_queue.join()
if __name__ == '__main__':
main()
使用5个线程。每个线程从队列中读取一个哈希值,并将其与密码列表进行比较。非常简单:1个线程在'for'循环中进行1次检查。
我想要更多一点:1个线程和几个线程来检查密码。因此,work()应该从队列中读取哈希值,并启动一些新的线程来检查密码(1个线程哈希值,10个线程检查密码)。例如:20个线程用于哈希值,以及每个线程中用于暴力破解哈希值的20个线程。就像这样。
我该如何做到这一点?
P.S. 对不起我的解释可能有误,请问如果你没有理解我想要什么。
P.P.S. 这不是关于暴力破解MD5,而是关于多线程。
谢谢。