• 压缩文件的密码不知道?小问题,Python分分钟就解开了!


    上篇咱们学习了怎么用Python压缩文件,但是有时候有些压缩文件是有密码的,或者咱们自己设置了密码但是忘记了,怎么办呢?今天教大家怎么用Python破解压缩文件密码。
    在这里插入图片描述
    开始之前,大家有什么需要的直接点我免费领取
    Python环境、pycharm编辑器/永久激活/翻译插件
    python零基础视频教程
    Python界面开发实战教程
    Python爬虫实战教程
    Python数据分析实战教程
    python游戏开发实战教程
    Python 电子书100本
    本节源码、福利文件
    统统免费领取
    Python相关问题可解答
    Python相关外包需求可发布
    Python相关招聘需求可发布

    准备材料

    这期准备材料比较少,都是基础代码。

    1. 掌握基础for循环,if判断。
    2. 掌握递归的用法。

    实现原理

    我们来讨论一下暴力破解的实现原理吧!

    首先我们来看一下,1,2这两个数字有多少种两位数以下的组合情况。

    是的,有6种:1、2、11,12、21、22。

    如果是123,有多少种两位数的组合情况。

    12种,分别是:1、2、3、11,12、13、21、22、23、31、32、33

    换种方式:

    我们的密码是1位数的,请问有多少种情况!
    答案是10种,0也是。密码从0到9的数字
    那我如果我们设置的密码是两位数的,有多少种情况!
    答案是100种。从00到99的数字。

    那我们发现一个规律,对于这种简单的操作,那我们就可以使用一个for循环来解决。

    代码如下:

    纯数字密码破解

    #这种情况不包含000001的情况。
    zip_file = zipfile.ZipFile("zip.zip")
    zip_list = zip_file.namelist()  # 得到压缩包里所有文件
    for i in range(9999):
        x=str(i)
        y=False
        for f in zip_list:
            try:
                zip_file.extract(f, "zip",x.encode('utf-8'))  # 循环解压文件到指定目录
                print("密码正确,密码是"+x)
                y=True
            except BaseException as e:
                print("密码输入错误"+x)
                break
        if y==True:
            break
    zip_file.close()  # 关闭文件,必须有,释放内存

    上面这种是纯数字的破解方式,下面我们来实现不是纯密码的情况

    list=[1,2,3]
    for i in list:
        print(i)
        for j in list:
            print(i+j)
            for y in list:
                print(i+j+y)

    如上,是基本原理,根据需要,我们可以自己添加需要的位数。上面这个是3位数以下的所有情况。

    看了上面的代码,我们想做一下简化操作,如果密码有60位,那我们岂不是要写60个for循环。

    那我们来看一下升级版:

    字符串暴力破解

    # 包含000001的情况。
    # zmb="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
    zmb = "abcdefg"
    list = zmb.replace("", " ").split()
    ​
    def blpj(list, num=2, x="", a=1, y=[]):
        a += 1
        for j in list:
            y.append(x + j)  # print(x+j)
            if a != num + 1:
                blpj(x=x + j, num=num, a=a, list=list)#内部调用自己,递归处理
        return len(y), y#返回一个密码组合列表。
    print(blpj(list, num=4))#调用并打印,list根据自己的想要填下,比如是数字,或者只有字母。

    怎么样,简单吗?大家可以把遇到的问题留言,咱们来一一解决。

  • 相关阅读:
    ML-线性回归
    ML-决策树
    numpy常用知识点备忘(2)
    numpy常用知识点备忘
    ML-朴素贝叶斯算法
    Git常用命令备忘
    机器学习-决策树算法
    机器学习-线性模型(线性回归与逻辑回归)
    深入JVM内核(四)垃圾回收器与GC参数
    深入JVM内核(三)对象存活判定算法与垃圾收集算法
  • 原文地址:https://www.cnblogs.com/hahaa/p/15079733.html
Copyright © 2020-2023  润新知