python - md5多线程暴力破解

标签 python multithreading md5 brute-force

我使用 python 2.7,我有一个简单的多头 md5 dict brute:

# -*- 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 个线程 1 个检查“for”循环。

我想要更多一点:1 个线程和几个线程来检查密码。所以 work() 应该从队列中读取哈希并启动新的线程数来检查密码(1 个线程哈希,10 个线程检查密码)。例如:20 个具有哈希的线程和 20 个用于在每个线程中破坏哈希的线程。诸如此类。

我该怎么做?

附言抱歉我的解释,问你是否不明白我想要什么。

附言这不是关于暴力破解 md5,而是关于多线程。

谢谢。

最佳答案

Python(称为 CPython)的默认实现使用 Global Interpreter Lock (GIL) 实际上只允许一个线程同时运行。对于 I/O 绑定(bind)的多线程应用程序,这通常不是问题,但对于像您这样的 CPU 绑定(bind)的应用程序,这意味着您不会看到太多多核加速。

我建议使用不具有 GIL 的其他 Python 实现(例如 Jython),或者重写您的代码以使用不具有 GIL 的其他语言。用 native 编译的代码编写它是一个好主意,但大多数具有 MD5 函数的脚本语言通常无论如何都会在 native 代码中实现它,所以老实说,我不希望 native 编译语言和脚本语言之间有太大的加速。

关于python - md5多线程暴力破解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783669/

相关文章:

python - django-taggit - 根据 vlog 发布日期显示所有标签

python - 使用列表理解返回第一个找到的元素或 None

c++ - 完成的线程对winapi中的主程序有影响吗?

java - 等待并通知 Objective c 中的等价物?

python - 如何使用 SQLAlchemy 将数据从 SQL_ASCII 复制到 UTF8 postgresql 数据库?

java - Thread.start() 和 Thread.run() 有什么区别?

php - 如何防止更新表单上密码字段的双重 md5?

filesystems - 文件的 MD5 哈希在每个系统上都是唯一的吗?

php - 15 个字符字母数字字符串的 MD5 碰撞概率

python - PythonQt 被弃用了吗?