Python项目:破解zip压缩包的密码

源码要点解析:

1.基本思路过程: 建立密码字典(常用的密码库)——尝试用每一个密码,来效验解压文件——解压成功,获取密码,跳出循环。破解失败,可能存在着其他的密码类型。

写了个“字典生成器”,你需要做的是传入两个参数“字典的组成元素”和“密码的长度列表”。比如,纯数字的“123”,你就传入如下的参数:

[0,1,2,3,4,5,6,7,8,9],数字就这9个

[3],密码的长度

自己准备一个要要压缩的文件夹,把zip压缩包的密码设置为123,3为数的数字密码,如下图所示。方便测试以下py源码的破解。

2.zfile.extractall关键字参数的用法: 用于将压缩文件(如 ZIP 文件)中的所有文件和子目录解压到一个指定的目录。这个函数是 zipfile 模块的一部分,下面是 zfile.extractall() 函数的参数:

  • path: 必需,解压后的目标路径

  • members: 可选,一个包含想要解压的文件名称的列表。如果未指定,那么所有的文件都将被解压。

  • pax_headers: 可选,一个包含 pax 头信息的字典。这个参数允许你为 pax 格式的压缩文件提供额外的头部信息。

  • path_resolver: 可选,一个函数,用于在解压过程中决定如何解析路径。默认情况下,使用系统的路径解析器。

  • numeric_names: 可选,如果设置为 True,那么在解压过程中将忽略文件名中的字符编码。默认情况下,这个参数是 False。

  • remove_trailing_slashes: 可选,如果设置为 True,那么在解压过程中会删除目标路径中的尾部斜杠。默认情况下,这个参数是 False。

  • mode: 可选,指定解压的模式。默认情况下,使用系统的默认模式。

  • pwd: 可选,一个包含密码的 bytes 对象,用于解密 ZIP 文件中的加密文件。

这个函数没有返回值,但是它会将压缩文件中的所有文件和子目录解压到指定的目录中。

**3.进度条可视化:**看到破解的过程,本程序使用 tqdm库
密码迭代器
密码总个数

4. 运行后的代码输出:

[‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]

11%|█ | 111/1000 [00:00<00:01, 888.06it/s]

恭喜破解成功:压缩文件的密码是: 111

破解时长:0.18748879432678223秒

进程已结束,退出代码0

↓ 源码如下 ↓

import time
from typing import List
from tqdm import tqdm
from itertools import chain
from zipfile import ZipFile

start_time = time.time()

# chr(97) -> 'a' 这个变量保存了密码包含的字符集
'''
dictionaries = [chr(i) for i in
                 chain(range(97, 123),    # a - z
                       range(65, 91),    # A - Z
                       range(48, 58))]    # 0 - 9
'''

# 设置数字密码库0-9
dictionaries = [str(i) for i in range(10)]
print(dictionaries)

# 1. 生成可能的密码库
def all_passwd(dictionaries: List[str], maxlen: int):
    # 返回由 dictionaries 中字符组成的所有长度为 maxlen 的字符串
    def helper(temp: list, start: int, n: int):
        # 辅助函数,是个生成器
        if start == n:  # 达到递归出口
            yield ''.join(temp)
            return
        for t in dictionaries:
            temp[start] = t  # 在每个位置
            yield from helper(temp, start + 1, n)

    yield from helper([0] * maxlen, 0, maxlen)

# 2. 破解密码
def cracking_passwords(file_path: str, pwd: str, save_path: str) -> bool:
    # zfile: 一个ZipFile类, pwd: 密码
    zfile = ZipFile(file_path, 'r')
    try:
        zfile.extractall(save_path, pwd=pwd.encode('utf-8'))
        # 密码输入错误的时候会报错
        now_time = time.time()  # 故使用 try - except 语句
        # 将正确的密码输出到控制台
        print(f'恭喜破解成功:压缩文件的密码是: {pwd}')
        print(f'破解时长:{now_time - start_time}秒')
        return True
    except:
        return False

if __name__ == '__main__':
    # 设置密码长度
    lengths = [3]
    # 获取密码的组合数
    total = sum(len(dictionaries) ** n for n in lengths)
    for password in tqdm(chain.from_iterable(all_passwd(dictionaries, maxlen) for maxlen in lengths), total=total):
        # 如果破解成功,程序结束,./ 表示解压到当前目录
        if cracking_passwords('pic2/pic3.zip', password, './'):
            break

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值