如何破解zip压缩文件的密码问题?

from zipfile import ZipFile
import os
def pojie(path,pwd):
    #对文件路径aa.zip进行切分两份,生成的压缩文件为[0],aa.zip为[1]
    #-1代表从aa从1开始把点干掉到zip 只保留zip后缀名
    type_1=os.path.splitext(path)[-1][1:]
    if type_1=='zip':  #判断这个获取到的是不是zip文件
        #创建文件流路径与只读模式 赋给zip
        with ZipFile(path,'r') as zip:
            #解压所有文件到 哪个文件目录
            print(f'正在尝试密码:{pwd}')
            #尝试运行文件 zip压缩文件,附带密码,如果密码不对则不进行退出
            #不打印错误,再次运行即可
            try:
                zip.extractall('./生成的压缩文件',pwd=str(pwd).encode('utf-8'))
                print(f'解压成功,密码是{pwd}')  #打印一下成功的密码
                return True  #返回一个True值则代表解压成功
            #失败就跳过接续
            except Exception as e:
                pass
def create_pwd(lengh):
    import itertools as its  #导入生成所有排列组合的模块
    #尝试的密码组合 包含了什么数字与字母或符号等
    words='1234567890abcdefghijklmnopqrstuvwxyz\][{};:"@#$%^&~-=!'
    #for循环多少位的密码组合,在不知道密码长度的情况下
    for i in range(1,lengh):
        #扔进去words 密码组合,repeat是有几位数的组合
        #base存放的就是根据words里面的字符串 组合出多少位数的组合方式
        base=its.product(words,repeat=i)
        #对base对象进行遍历循环,base本身就是一个迭代对象
        for i in base:
            #所以这里必须生成一个迭代器,join(i)方法 将i变成字符串
            yield ''.join(i)
if __name__ == '__main__':
    #对create_pwd 方法进行遍历,最后保留的全是计算机尝试的密码
    for p in create_pwd(4):
        #给pojie方法中的path传入一个压缩包的路径,并传入一个p代表密码,并赋给flag
        flag=pojie('./生成的压缩文件/aa.zip',p)
        if flag:  #如果flag有值那么就退出循环 不返回True的话是没有值的
            break  #返回True才可以退出循环

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值