Python 试图获取7zip密码的代码速度很慢

Python 试图获取7zip密码的代码速度很慢,python,python-3.x,Python,Python 3.x,像我之前的许多人一样,我丢失了7zip密码。事实上,它和我以前手机里的其他东西一起被摧毁了。我99%确定我知道大部分密码,所以我假设它可以被暴力破解,所以我写了下面的代码,它可以工作,但速度非常慢。在6.1秒内尝试21次以获取示例。瓶颈显然是sp.wait(),但我尝试解决的所有问题都不起作用。我想这是有道理的,因为Python在完成之前对这个过程一无所知。我在subprocess.Popen()上尝试了try/的许多变体,但都没有成功。请注意,7zip会将一个0KB版本的文件放在密码错误的文件

像我之前的许多人一样,我丢失了7zip密码。事实上,它和我以前手机里的其他东西一起被摧毁了。我99%确定我知道大部分密码,所以我假设它可以被暴力破解,所以我写了下面的代码,它可以工作,但速度非常慢。在6.1秒内尝试21次以获取示例。瓶颈显然是sp.wait(),但我尝试解决的所有问题都不起作用。我想这是有道理的,因为Python在完成之前对这个过程一无所知。我在subprocess.Popen()上尝试了try/的许多变体,但都没有成功。请注意,7zip会将一个0KB版本的文件放在密码错误的文件夹中,但如果使用正确的密码不生成其他错误,则文件夹必须为空。代码中虚构的密码。在Python3.5.1和7zip v9.2中使用Win7。非常感谢您的帮助。谢谢,乔

import os
import time
import itertools
import subprocess

start_time = time.time()
cmdline = r"C:\Program Files\7-Zip\7z e C:\archive.7z -oC:\temp -p"
path = r"C:\temp"

unknown_part='$oz'
known_part='MiStup!dB'
attempts = 0

for password_length in range(2, 4):
    for guess in itertools.product(unknown_part, repeat=password_length):
        try:
            os.remove(r'C:\temp\extractedfile.txt')
        except:
            None
        attempts += 1
        guess = ''.join(guess)
        newline = cmdline + known_part + guess
        sp = subprocess.Popen(newline, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
        sp.wait()
        if sp.returncode == 0:
            print("Password is %s, Found in %i attempts in %s seconds" % (known_part+guess, attempts, time.time()-start_time))
            break

您是否尝试过在子流程中使用Python模块/包而不是使用7z命令行工具?在这样一个已知范围内工作很可能是并行的,并且会从中获得巨大的好处。StefanPochmann,不,现在就开始阅读libarchive。看起来可行,我会努力的。非常感谢@StefanPochmann,我找不到如何向libarchive添加密码,Lzma与7zip不兼容。您知道还有其他软件包吗?@match,添加了一个ThreadPool(),并在双四核系统上运行了2.9秒,我可以添加多少线程,或者这只是反复试验,直到机器冻结?