python暴力破解压缩包密码(python暴力破解zip压缩包)

  • 作者简介:一名后端开发人员,每天分享后端开发以及人工智能相关技术,行业前沿信息,面试宝典。
  • 座右铭:未来是不可确定的,慢慢来是最快的。
  • 个人主页极客李华-CSDN博客
  • 合作方式:私聊+
  • 这个专栏内容:BAT等大厂常见后端java开发面试题详细讲解,更新数目100道常见大厂java后端开发面试题。
  • 我的CSDN社区:https://bbs.csdn.net/forums/99eb3042821a4432868bb5bfc4d513a8
  • 微信公众号,抖音,b站等平台统一叫做:极客李华,加入微信公众号领取各种编程资料,加入抖音,b站学习面试技巧,职业规划

python暴力破解压缩包密码

简介

简介
ZIP文件格式是一种数据压缩和文档储存的文件格式,原名Deflate,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,它的MIME格式为application/zip。当前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7z格式。从性能上比较,RAR及7z格式较ZIP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。Microsoft从Windows ME操作系统开始内置对zip格式的支持,即使用户的计算机上没有安装解压缩软件,也能打开和制作zip格式的压缩文件,OS X和流行的Linux操作系统也对zip格式提供了类似的支持。因此如果在网络上传播和分发文件,zip格式往往是最常用的选择。

ZIP是一种相当简单的分别压缩每个文件的存档格式。分别压缩文件允许不必读取另外的数据而检索独立的文件;理论上,这种格式允许对不同的文件使用不同的算法。不管用何种方法,对这种格式的一个告诫是对于包含很多小文件的时候,存档会明显的比压缩成一个独立的文件(在类Unix系统中一个经典的例子是普通的tar.gz存档是由一个使用gzip压缩的TAR存档组成)要大。

编码讲解

准备工作

首先是需要创建一个.zip后缀名的压缩包,然后给这个zip压缩包设置一个密码。

在这里插入图片描述
注意这里要点击ZIP传统加密。
在这里插入图片描述

在这里插入图片描述

把这个文件放入到pycharm里面。
在这里插入图片描述

开始编码

  • 首先是获取文件后缀名
from zipfile import ZipFile
import os

def passwd(path):
    # 获取文件的后缀名
    suffix_name = os.path.splitext(path)[-1][1:]
    print(suffix_name)

if __name__ == '__main__':
    passwd("D:\系统默认\桌面\python数据分析\python爬虫\zip\二叉树.zip")

运行结果
在这里插入图片描述

  • 没有密码的解压方法
from zipfile import ZipFile
import os

def passwd(path):
    # 获取文件的后缀名
    suffix_name = os.path.splitext(path)[-1][1:]
    # print(suffix_name)
    # 如果是zip文件
    if suffix_name == 'zip':
        # 开始读zip文件
        with ZipFile(path, 'r') as zip:
            # 解压到指定文件目录下
            zip.extractall("D:\系统默认\桌面\python数据分析\python爬虫\\target")

if __name__ == '__main__':
    passwd("D:\系统默认\桌面\python数据分析\python爬虫\zip\二叉树.zip")

运行结果
对于没有密码的解压,我们写到这一步就可以了,如果设置了有密码,然后了我们就会发现,这个会报错。
在这里插入图片描述

  • 编写枚举密码的函数
    如果学过算法的就知道了,这个就是算法里面的,那个排列组合题,在java和c++里面,需要自己去写,而且这个时间复杂度还很高,在python立面别人已经帮忙做好了这个功能。
def create_pwd(words):
    # 通过导入这包来设置枚举序列
    import itertools as its
    # 设置基础需要枚举的字符集
    
    # 这个base的意思就是把words集合的字符取repeat次组合
    # 打印出来
    base = its.product(words, repeat=2)
    for i in base:
        print(''.join(i))

运行结果
在这里插入图片描述

  • 用暴力破解来破解程序
    其实我们学过算法就知道,其实只要稍微密码长度长一点,基本上就不能够被破解了,除非需要涉及到哈希字典,这个我们以后再讨论,现在就只讨论暴力破解的写法。

完整代码

from zipfile import ZipFile
import os

def passwd(path, pwd):
    # 获取文件的后缀名
    suffix_name = os.path.splitext(path)[-1][1:]
    # print(suffix_name)
    # 如果是zip文件
    if suffix_name == 'zip':
        # 开始读zip文件
        with ZipFile(path, 'r') as zip:
            # print("当前尝试的密码是:%s"%(pwd))
            # 解压到指定文件目录下
            try:
                # print(pwd.encode('utf-8'))
                zip.extractall("D:\系统默认\桌面\python数据分析\python爬虫\\target", pwd=pwd.encode('utf-8'))
                print("解压成功,密码是:%s"%(pwd))
                return True
            except Exception as e: # 添加一个异常处理
                pass

def create_pwd(words):
    # 通过导入这包来设置枚举序列
    import itertools as its
    # 设置基础需要枚举的字符集

    # 这个base的意思就是把words集合的字符取repeat次组合
    # 打印出来
    base = its.product(words, repeat=6)

    # 一般需要把这个打印函数注释 因为这个函数运行很消耗时间的
    for i in base:
        # print(''.join(i))
        yield ''.join(i) # 把这个函数制作成一个迭代器

if __name__ == '__main__':

    words = '123456789'
    dir = 'D:\系统默认\桌面\python数据分析\python爬虫\zip\二叉树.zip'
    for p in create_pwd(words):
        flag = passwd(dir, p)
        if flag == True:
            break

运行结果
这个结果的命名很奇怪,但是问题不大只要可以解压,后面会讲解一下,比较难的解压方法,涉及到算法。
在这里插入图片描述

在这里插入图片描述
如果大家觉得有用的话,可以关注我下面的微信公众号,极客李华,我会在里面更新更多行业资讯,企业面试内容,编程资源,如何写出可以让大厂面试官眼前一亮的简历,让大家更好学习编程,我的抖音,B站也叫极客李华。

  • 13
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客李华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值