python破解zip文件密码

1、单线程破解纯数字密码

注意: 不包括数字0开头的密码

import zipfile,time,sys

start_time = time.time()
def extract():
    zfile = zipfile.ZipFile('IdonKnow.zip')#读取压缩包,如果用必要可以加上'r'
    for num in range(1,99999,1):
        try:
            pwd = str(num)
            zfile.extractall(path='.',pwd=pwd.encode('utf-8'))
            print ("当前压缩密码为:",pwd)
            end_time = time.time()
            print ('单线程破解压缩包花了%s秒'%(end_time-start_time))
            sys.exit(0)
        except Exception as e:
            pass
if __name__=="__main__":
    extract()

破解结果:
在这里插入图片描述

2、多线程破解纯数字密码

注意: 不包括数字0开头的密码

import zipfile,time,threading

start_time = time.time()
flag = True # 用于判断线程是否需要终止,为True时程序执行

def extract(password, file):
    try:
        password = str(password)
        file.extractall(path='.', pwd=password.encode('utf-8'))
        print ("当前压缩密码为:",password)
        end_time = time.time()
        print ('多线程破解压缩包花了%s秒'%(end_time-start_time))
        global flag
        flag = False#成功解压其余线程终止
    except Exception as e:
        pass
def main():
    zfile = zipfile.ZipFile("test.zip", 'r')
    for number in range(1, 99999,1):
        if flag:
            thr1 = threading.Thread(target=extract, args=(number, zfile))
            thr2 = threading.Thread(target=extract, args=(number, zfile))
            
            thr1.start()
            thr2.start()
            
            thr1.join()
            thr2.join()
if __name__ == '__main__':
    main()

破解结果:
在这里插入图片描述
提示: 多线程对数字型的运算没有多大帮助

3、破解英文+数字型的密码

import random,zipfile,time,sys

class MyIter():
    cset = 'abcdefghijklmnopqrstuvwxyz0123456789'
    def __init__(self,min,max):#迭代器实现初始方法,传入参数
        if min < max:
            self.minlen = min
            self.maxlen = max
        else:
            self.ninlen = max
            self.maxlen = min
    def __iter__(self):#直接返回slef实列对象
        return self
    def __next__(self):#通过不断地轮循,生成密码
        rec = ''
        for i in range(0,random.randrange(self.minlen,self.maxlen+1)):
            rec += random.choice(MyIter.cset)
        return rec
def extract():
    start_time = time.time()
    zfile = zipfile.ZipFile('test1.zip','r')
    for password in MyIter(1,4):#随机迭代出1~4位数的密码,在不明确位数的时候做相应的调整
        if zfile:
            try:
                zfile.extractall(path='.',pwd=str(password).encode('utf-8'))
                print ("当前压缩密码为:",password)
                end_time = time.time()
                print ('当前破解压缩包花了%s秒'%(end_time-start_time))
                sys.exit(0)
            except Exception as e:
                print ('pass密码:',password)
                pass
if __name__=="__main__":
    extract()

破解结果:
在这里插入图片描述

发布了62 篇原创文章 · 获赞 25 · 访问量 9303

猜你喜欢

转载自blog.csdn.net/ayouleyang/article/details/103922756