利用Python对加密zip压缩包进行解压

Welcome

这是本人初学Python学习编写的一个小小鸡肋程序。第一次写博客,如果有错误或者不好的地方欢迎指出~
Alt

功能介绍

  • 用户输入压缩包的名称、路径
    (比较简单,就是参数的传递,我也没有列出代码)
  • 执行----等待数秒----成功破解

主要代码展示

#导库
import zipfile #压缩包的读写解压
import random
import sys
import time
from threading import Thread

Python的库真的挺强大

#建立一个生成密码的类
#密码格式:4-18位(0-9)(a-z)(A-Z)(标点符号)
#可以先简单一点,密码只有012345哦
class MyIterator():
    letters = '012345'
    min_dig = 0
    max_dig = 0
    #5-6位
    def __init__(self,min_dig,max_dig):
        if min_dig < max_dig:
            self.min_dig = min_dig
            self.max_dig = max_dig
        else:
            self.min_dig = max_dig
            self.max_dig = min_dig

    #迭代器来循环
    def __iter__(self):
        return self
    def __next__(self):
        rst = str()
        for i in range(0,random.randrange(self.min_dig,self.max_dig +1)):
            rst += random.choice(MyIterator.letters)
        return rst

类的定义比较简单就是符合密码位数的前提下进行产生密码

#提取压缩文件
def extract(name,minum,maxnum):
    start_time = time.time()
    zfile = zipfile.ZipFile(name)
    for p in MyIterator(minum,maxnum):
        print(p)

        try:
        #异常处理
            zfile.extractall(path='.',pwd=str(p).encode("ascii"))
            #或者用下面这个都可以
            #zfile.extractall(path='.',pwd=str(p).encode('utf-8'))
            #本处比较难弄的就是pwd的形式不能是str必须是bytes
            print('cracked succeed\nsecret:{}'.format(p))
            now_time = time.time()
            print('time:{}'.format(now_time-start_time))
            sys.exit(0)
        except Exception as e:
            pass

在提取函数我遇到的困难也比较多,主要就是对于密码形式不匹配的问题还有密码正确但仍然显示Bad Password,此处网上也没有一个好的解释和解决办法,我研究了一下

原因是Python的zipfile库只能对传统加密方式PKWARE的zip文件的解压,我看网上有大神已经向bugs.python.org反应但是被驳回了。很棘手,也希望大家出谋划策。
附链接:传送门

改进之处

多线程
其实我也不太懂,从某个地方学到的

#多线程
file_name,minum,maxnum= info()
if __name__ == '__main__':
    t1 = Thread(target=extract(file_name,minum,maxnum))
    t1.start()

这个可以大大提升代码运行速度!

运行效果

Please input the name of zip
(you should put this file into proper location):1.zip
This program can support any digital numbers
The digital minimum number:5
The digital maximum number:6

17021
43579
254078
934245
285647
45183
78544
056594
787680
973985
89251
19839
71547
733985
724881
29907
15094
42334
88076
94017
99453
859618
81673
529135
95936
325949
556095
061282
391034
82420
017520
913831
69887
03720
24799
35013
040773
96646
70777
950232
268964
50334
94807
92279
339313
08026
36202
21738
51283
451682
759984
07992
109728
01089
752386
509322
323192
64189
299812
92038
140760
135365
93374
542538
237538
63002
096322
72603
67947
74233
148310
12788
17380
58029
20676
20501
600570
66084
22520
708513
13019
43018
307211
494588
173255
268364
58198
355385
49047
366481
133364
14874
532637
64078
925726
22630
14874
05346
87320
26371
65355
67625
62092
373295
882154
994594
474171
90850
02227
771285
479875
49425
66407
20246
01415
830341
30872
277574
990627
92112
059506
03487
32752
547849
283188
583160
57829
353266
81633
551957
55277
888314
81321
15068
72725
46341
12322
173352
359950
753281
090492
27732
66751
370658
739133
77583
560723
110234
32493
350567
92932
90226
051609
18973
440571
99819
228357
25902
324541
396111
200372
43027
915671
565161
899486
27932
491613
426351
234673
593063
437932
09622
204069
633820
48658
518642
404497
134945
41032
349277
59354
612621
29740
99647
833467
04971
049113
270992
598551
40453
.
.
.
.
.
.

cracked succeed
secret:12345
time:3.4887523651123047

当然这个只是破解密码的雏形,后面我会继续学习,升级升级这个代码!
careful


版权声明:本文为weixin_43913500原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。