Python实战-暴力破解zip文件解压密码

Python实战-暴力破解zip文件解压密码使用Python暴力解压传统加密的ZIP文件。

大家好,又见面了,我是你们的朋友全栈君。

简介

使用的核心模块是python标准库中的zipfile模块。这个模块可以实现zip文件的各种功能,具体可以查看官方参考文档。这里的暴力破解的意思是对密码可能序列中的值一个一个进行密码尝试,这对人来说是很难的,可是对计算机而言并不难。有时候我们下载的zip文件需要密码解压而我们不知道,需要付费才知道。所有这里主要介绍两种暴力破解的密码:纯数字密码和英文数字组合密码。

 

文件创建

首先测试文件为test.txt(仅包含单行文本),压缩后文件为test.zip,压缩密码为2340,压缩后删除目录下的txt文件。。

Python实战-暴力破解zip文件解压密码

Python实战-暴力破解zip文件解压密码

Python实战-暴力破解zip文件解压密码

 

上图注意勾选传统加密。

 

 

 

纯数字密码

指的是不用0开头的数字密码,0开头见后面的字母组合。原理就是zipfile模块解压压缩文件时,一旦密码不正确,程序会终止,在try语句只有成功解压的密码才会执行到extract函数调用后面的语句。

代码:

import zipfile
import time
import threading
startTime = time.time()
# 判断线程是否需要终止
flag = True


def extract(password, file):
    try:
        password = str(password)
        file.extractall(path='.', pwd=password.encode('utf-8'))
        print("the password is {}".format(password))
        nowTime = time.time()
        print("spend time is {}".format(nowTime-startTime))
        global flag
        # 成功解压其余线程终止
        flag = False
    except Exception as e:
        print(e)


def do_main():
    zfile = zipfile.ZipFile("test.zip", 'r')
    # 开始尝试
    for number in range(1, 9999):
        if flag is True:
            t = threading.Thread(target=extract, args=(number, zfile))
            t.start()
            t.join()


if __name__ == '__main__':
    do_main()

Python实战-暴力破解zip文件解压密码

 

显然,解压成功,这里提一下这种编码 密码的方式只适用于传统zip加密,winrar有一种新式的默认加密方式,是不可以的。 

字母数字混合密码

这里情况密码组合太多,为了防止内存溢出,改用迭代器。这种情况费时很久,可以闲来无事挂着脚本。这里再次压缩文件,密码为python。

import zipfile
import random
import time
import sys


class MyIterator():
    # 单位字符集合
    letters = 'abcdefghijklmnopqrstuvwxyz012345678'
    min_digits = 0
    max_digits = 0

    def __init__(self, min_digits, max_digits):
        # 实例化对象时给出密码位数范围,一般4到10位
        if min_digits < max_digits:
            self.min_digits = min_digits
            self.max_digits = max_digits
        else:
            self.min_digits = max_digits
            self.max_digits = min_digits

    # 迭代器访问定义
    def __iter__(self):
        return self

    def __next__(self):
        rst = str()
        for item in range(0, random.randrange(self.min_digits, self.max_digits+1)):
            rst += random.choice(MyIterator.letters)
        return rst


def extract():
    start_time = time.time()
    zfile = zipfile.ZipFile("test.zip")
    for p in MyIterator(5, 6):
        try:
            zfile.extractall(path=".", pwd=str(p).encode('utf-8'))
            print("the password is {}".format(p))
            now_time = time.time()
            print("spend time is {}".format(now_time-start_time))
            sys.exit(0)
        except Exception as e:
            pass


if __name__ == '__main__':
    extract()

字符的序列组合很多,需要等待。

补充说明

很多人反馈这个方法无效,这主要是因为文件路径不正确(我的代码是默认该Python脚本所在目录下的zip文件进行解压的)和加密方式并非传统加密。这种暴力破解方法只在自己大致记得密码位数和密码格式(如只有字母等)时比较实用,完全的暴力破解是不现实的,毕竟做加密的也不是白做的。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142803.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [紧急通告]关于蓝色理想经典论坛无法访问的声明

    [紧急通告]关于蓝色理想经典论坛无法访问的声明亲爱的蓝色理想网站及经典论坛的会员朋友们,我们在这里非常遗憾地通知大家,在未来的一段时间里,我们将不能保证经典论坛的正常访问,由于来自外部的不可抗力,论坛服务器所在的机房已对我们进行封网处理,原因是相

    2022年7月4日
    35
  • NSGA2算法中文版详细介绍

    NSGA2算法中文版详细介绍NSGA2主要是对NSGA算法的改进。NSGA是N.Srinivas和K.Deb在1995年发表的一篇名为《Multiobjectivefunctionoptimizationusingnondominatedsortinggeneticalgorithms》的论文中提出的。该算法在快速找到Pareto前沿和保持种群多样性方面都有很好的效果,不过在这么多年的应用中也出现了如下的

    2022年5月19日
    48
  • 自监督学习(self-supervised learning)(20201124)

    自监督学习(self-supervised learning)(20201124)看论文总是会看出来一堆堆奇奇怪怪的名词。从远程监督、有监督、半监督、无监督开始,最近又看到了一个自监督。首先先对上面的概念进行简述:半监督(semi-supervisedlearning):利用好大量无标注数据和少量有标注数据进行监督学习;远程监督(distant-supervisedlearning):利用知识库对未标注数据进行标注;无监督:不依赖任何标签值,通过对数据内在特征的挖掘,找到样本间的关系,比如聚类相关的任务。自监督:利用辅助任务从无监督的数据中挖掘大量自身的信息。

    2025年11月18日
    4
  • AJAX(Asynchronous JavaScript And XML)

    AJAX(Asynchronous JavaScript And XML)

    2021年7月7日
    77
  • LaTeX 换行

    LaTeX 换行LaTeX换行的几种方法方法一:输入\\结果即只进行单纯换行,并无缩进方法二:输入\par显示结果为自动换行加缩进

    2022年5月14日
    995
  • c语言 goto 跳出循环,goto语句可以跳出循环.ppt

    c语言 goto 跳出循环,goto语句可以跳出循环.pptgoto语句可以跳出循环.ppt循环结构顺序、分支、循环是结构化程序设计的三种基本结构,本章主要任务是学习如何使用循环结构解决问题。主要内容for循环do循环while循环循环的中断任务1任务功能:计算1~100之间的奇数和及偶数和学习目的:利用for循环解决简单问题;程序代码privatevoidbutton1_Click(obj…

    2022年5月29日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号