我用Python打开了女朋友的加密压缩包(生产者消费者模型和多进程实现)

本文讲述了作者如何利用Python,通过生成密码库、建立生产者消费者模型和采用多进程技术,成功解密女朋友遗忘密码的加密压缩包,优化后大大减少了尝试时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我用Python打开了女朋友的加密压缩包

📣 概况
女朋友的压缩包密码忘记了,在她说明是6位数的某一个日期后,我决定帮她打开,毕竟我也想看看加密的压缩包里面是什么图片。

关键字:多进程 产消模型

首先我们需要生成一个密码库,已知密码是6位数的纯数字,即000000-999999。这就简单了。上代码:

#生成从000000到99999的密码表
f = open('passdict.txt','w')
for id in range(1000000):
    password = str(id).zfill(6)+'\n'
    f.write(password)
f.close()

这样就生成一个名为passdict的文本密码库了。
图片
没想到这密码库竟然有7.62MB这么大。

接下来就可以逐个尝试了,当然不是手动一个个尝试啦,让程序帮我们逐个尝试。

import zipfile
import time


def extractFile(zipFile, password):
    try:
        zipFile.extractall(pwd=bytes(password, "utf8"))
        print("压缩包密码是" + password)  # 破解成功
        t = True
        return t
    except:
        print("尝试" + password + "失败")


def main():
    t1 = time.time()
    zipFile = zipfile.ZipFile('compression.zip')
    PwdLists = open('passdict.txt')  # 读入所有密码
    for line in PwdLists.readlines():  # 挨个挨个的写入密码
        Pwd = line.strip('\n')
        if extractFile(zipFile, Pwd):
            break
    t2 = time.time()
    print("总耗时:{}".format(str(t2-t1)))

if __name__ == '__main__':
    main()

找呀找呀!!!!
图片
通过程序,我最终找到了压缩包的密码,
在这里插入图片描述
是141012,应该是她在14年10月14日建的压缩包图片。

不过竟然花费了将近405秒图片,这怎么能忍。

可以尝试一下生产者与消费者的模型和多进程实现。

生产者:通过读取密码,分别put进队列中,代码如下:

# 创建生产者
def producer(q):
    pwdLists = open('passdict.txt')
    for line in pwdLists.readlines():  # 挨个挨个的写入密码
        pwd = line.strip('\n')
        q.put(pwd)

消费者:通过队列获取密码,然后尝试解密,代码如下:

# 创建消费者,消费者一般是个死循环,要一直监听是否有需要处理的信息。
def customer(q, num, t1):
    time.sleep(1)
    while 1:
        if num.value == 1:
            t2 = time.time()
            print("总耗时:{}秒".format(str(t2-t1.value)))
            break
        pwd = q.get() # 收消息
        extractFile(pwd, num)

def extractFile(password, num):
    zipFile = zipfile.ZipFile('compression.zip')
    try:
        zipFile.extractall(pwd=bytes(password, "utf8"))
        print("成功!女朋友的压缩包密码是" + password)  # 破解成功
        num.value = 1
    except:
        print("尝试" + password + "失败")

在这里,我使用了生产者与消费者的模型,通过多进程的方式可以更快速的进行尝试。

在这里插入图片描述

方案优化后只花费了298秒就找到了。

完整代码公众号回复“压缩包”获取。
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值