You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中结合多进程高效暴力破解5位字符SHA256哈希?

解决5位字符SHA256多进程暴力破解的生成器优化方案

核心问题拆解

  • Pool.map会一次性把所有字符组合加载到内存,5位字符的组合数(比如大小写字母+数字的话是62^5≈9亿)直接撑爆内存,导致系统崩溃。
  • Pool.imap默认按单任务分发,进程间频繁的通信开销完全抵消了多进程的优势,所以比单进程还慢。
  • 单进程没有跨进程通信的额外消耗,还能高效利用CPU缓存,因此耗时更短。

具体优化方案

1. 手动控制任务分块(关键)

用Pool.imap_unordered或Pool.imap时,指定合理的chunk size,大幅减少进程间通信的次数。分块大小可以根据CPU核心数调整,比如固定为100000~200000(可根据机器性能微调),或者按公式估算:chunk_size = 总任务数 // (CPU核心数 * 4)。

示例代码:

import multiprocessing
import hashlib
from itertools import product

TARGET_HASH = "你的目标SHA256哈希值"
CHARSET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

def crack_worker(chunk):
    for chars in chunk:
        plaintext = ''.join(chars)
        if hashlib.sha256(plaintext.encode()).hexdigest() == TARGET_HASH:
            return plaintext
    return None

if __name__ == "__main__":
    # 不要盲目用满超线程,CPU密集型任务用物理核心数更高效
    process_num = multiprocessing.cpu_count() // 2
    combinations = product(CHARSET, repeat=5)
    chunk_size = 100000  # 可根据机器性能调整

    with multiprocessing.Pool(process_num) as pool:
        # 用imap_unordered,找到结果就立即返回,不用等所有任务完成
        for result in pool.imap_unordered(crack_worker, (tuple(combinations) for _ in iter(lambda: None, None)), chunksize=chunk_size):
            if result is not None:
                print(f"找到明文:{result}")
                pool.terminate()  # 找到结果直接终止所有进程
                break

2. 避免直接传递超大生成器

不要把product生成器直接丢给进程池,而是手动拆分生成器为多个子块,每个块包含N个字符组合,再交给进程处理。这样既不会一次性加载所有数据到内存,又能降低通信频率。

3. 优先用imap_unordered而非imap

暴力破解只要找到第一个匹配结果就行,imap_unordered会在任意进程完成任务后立刻返回结果,不用按顺序等待,能更快终止整个任务流程。

4. 合理限制进程数量

如果你的CPU支持超线程,比如8核心16线程,建议用8个进程而非16个——SHA256是纯CPU密集型任务,超线程会带来额外的上下文切换开销,反而拖慢速度。

为什么优化后多进程会比单进程快?

当进程间通信的开销被控制在最低时,多进程就能真正发挥多核CPU的并行计算优势。比如4核心机器,优化后耗时通常能降到单进程的1/3~1/4左右,远快于单进程的1分33秒。

内容的提问来源于stack exchange,提问作者Thanh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:26:19