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

Python海量数据遍历优化:SHA512哈希字典攻击效率提升咨询

核心优化说明

你当前代码慢的核心原因不是数据结构选择问题,而是存在大量无意义的重复操作、高开销的IO操作,没有利用Python执行特性和硬件性能,具体优化点如下:

  • 第一,删除循环内的print(big_word)语句:控制台IO是极慢的操作,这是你当前速度慢的头号元凶,删除后性能可以提升几十到上百倍。
  • 第二,提前预处理单词列表:读入字典时就完成strip()操作,不要在双层循环中重复对同一个单词执行多次strip,减少无意义的重复计算。
  • 第三,减少不必要的函数调用和字符串比对:将哈希校验逻辑直接内联到循环中,避免高频函数调用开销;同时提前把目标哈希转成字节格式,直接比对二进制哈希值而非十六进制字符串,比对速度可以提升一倍左右。
  • 第四,提前拼接第一个单词加空格的前缀,减少内层循环的字符串拼接操作,进一步降低重复计算开销。
  • 第五,找到匹配结果后直接终止全部循环,避免多余的计算。
  • 额外可选优化:如果有多核CPU,可以用多进程拆分计算任务,CPU密集型场景下可以做到核数倍的性能提升;也可以用PyPy替代CPython执行代码,PyPy对循环运算的优化比CPython好很多,这类纯计算场景可以再提速3-5倍。

优化后代码

import hashlib
import sys
import time

if __name__ == "__main__":
    target_hash = sys.argv[1].strip()
    # 提前把目标哈希转成二进制,避免每次比对字符串
    target_digest = bytes.fromhex(target_hash)
    
    # 读字典的时候直接预处理好strip后的单词
    with open("02-dictionary.txt", "r", encoding="utf-8") as fp:
        words = [word.strip() for word in fp]
    
    start_time = time.time()
    found = False
    result = ""
    
    for word1 in words:
        # 提前拼接好第一个单词加空格的前缀,减少内层循环的拼接操作
        prefix = word1 + " "
        for word2 in words:
            candidate = prefix + word2
            # 直接内联哈希计算,避免函数调用开销
            if hashlib.sha512(candidate.encode()).digest() == target_digest:
                found = True
                result = candidate
                break
        if found:
            break
    
    end_time = time.time()
    if found:
        print('Solution found')
        print("The word was:", result)
    else:
        print("No solution found")
    print("Time taken:", round(end_time - start_time, 5), "seconds")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:33:00