今天发生了个有趣的事情,有个朋友发了一个带密码保护的Zip文件给我,却不给我密码,我就琢磨这怎么可以'猜'到密码呢?

经过一系列的尝试,最终使用python把这个密码给'猜'出来了。要想写出破解密码的脚本需要了解一下python的zipfile库,这里百度上的资源多的很,我就直接给大家上代码再一一解释。

import zipfile
from threading import Thread

  首先导入zipfile 和 Thread库下的threading,作用分别是:可以通过代码来打开zip文件,有密码保护我们提供密码就行了(至于怎么提供我后面会讲^_^); 开启多线程来'猜'密码,使得效率更高!

这里我们可以练习一下zipfile是怎么打开文件的呢?

zipFile = zipfile.ZipFile("test1.zip")
zipFile = extractall(pwd= bytes("123", "utf8" ))

  我们在和这个练习的python脚本相同路径下生成一个压缩密码为:123的压缩包,命名为test1.zip 当然你可以在任何地方生成练习文件,打开的时候记得写上绝对路径就OK啦~~

你会发现这个代码运行后你的压缩文件被解压啦,我们思考一下那么密码错误怎么办呢,当然就是打不开啦。我们利用这个特性,使用python的预防错误机制try ,except  这个机制的意思是:如果我放在try:里面要执行的代码有问题,程序不会报错而会运行except: 下面的代码。

核心:那我们就利用这点,让程序去给我们尝试几乎无限种可能的密码的排列组合,如果密码错误就跳过,知道找到密码为止~

题外话:我觉得我那个朋友设置的密码应该会是数字,所有我用python写了一个.txt文件:将0到10000000的数字全部写入。貌似有80多MB....真的很大...

接下来就开始猜密码了:

def extractFile(zipFile, password):   ###提取文件的类
try:
zipFile.extractall(pwd= bytes(password, "utf8" )) ###打开压缩文件,提供密码...
print("This file\'s password is " + password) ###破解到密码
except:
pass ###假如失败,就跳过继续

 写了一个方法:这个方法需要我们提供需要破解的文件的相关信息, 然后需要我们提供这个文件的密码(我们当然不知道密码,不过很快就会知道的了~~~)

def mainStep():
zipFile = zipfile.ZipFile('C:\\Users\\Flash\\Desktop\\Secret.zip') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件,默认是r
PwdLists = open('C:\\Users\\Flash\\Desktop\\dictionary.txt') #读入所有密码
for line in PwdLists.readlines(): #挨个挨个的写入密码
Pwd = line.strip('\n')
t = Thread(target=extractFile, args=(zipFile, Pwd))
t.start()

  然后我们再写一个方法:这个方法是为extractFile方法提供需要破解文件的相关信息的, 然后在打开‘密码字典’把密码字典的所有东西都读到PwdLists里面, 通过for循环把PwdLists里面的每个密码都拿去尝试,直到有正确密码为止   t = Thread(target=extractFile, args=(zipFile, Pwd))  这个的意思是在线程先运行使得尝试的速度更快,具体可以百度了解线程的知识。

 

这个是我生成的密码字典 和 我破解的朋友的密码~~~/得意 O(∩_∩)O哈哈~

我贴出全部代码:

import zipfile
from threading import Thread def extractFile(zipFile, password): ###提取文件的类
try:
zipFile.extractall(pwd= bytes(password, "utf8" )) ###打开压缩文件,提供密码...
print("This file\'s password is " + password) ###破解到密码
except:
pass ###假如失败,就跳过继续
def mainStep():
zipFile = zipfile.ZipFile('C:\\Users\\Flash\\Desktop\\Secret.zip') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件,默认是r
PwdLists = open('C:\\Users\\Flash\\Desktop\\dictionary.txt') #读入所有密码
for line in PwdLists.readlines(): #挨个挨个的写入密码
Pwd = line.strip('\n')
t = Thread(target=extractFile, args=(zipFile, Pwd))
t.start()
if __name__ == '__main__':
mainStep()

  注意:我用的是绝对路径,大家可以根据自己的路径修改哦

代码不难,却是很有趣,做什么事情没有绝对的兴趣也没有绝对的枯燥乏味,我们要自己让自己觉得有意思起来:这个很有趣,这个很有趣...(心里:一点也没有!! 哈哈 开个玩笑。)

希望我们抱着一种开心的心态学习和进步。大家一起努力吧~~

Python 破解带密码保护的Zip文件的更多相关文章

  1. python自带编译器在写入文件时闪退,或者一步步执行到写入时提示8170。解决办法:

    用python黑框运行程序写入文件时闪退,或一行行运行到写入时提示8170数字. 经试验,为文件路径错误导致. with open("1.doc", "wb") ...

  2. 使用Python自带difflib模块进行文件内容差异对比

    difflib_text.py #!/usr/bin/python import difflib import sys try: textfile1=sys.argv[1] textfile2=sys ...

  3. python怎样压缩和解压缩ZIP文件

    https://zhidao.baidu.com/question/1498409764366387259.html

  4. 暴力破解ZIP文件密码

    Python 的标准库提供了 ZIP 文件的提取压缩模块 zipfile,现在让我们试着用这个模块,暴力破解出加密的 ZIP 文件!我们可以用 extractall()这个函数抽取文件,密码正确则返回 ...

  5. Python 标准库 —— zipfile(读取 zip 文件)

    Python模块学习:zipfile zip文件操作 Python 学习入门(16)-- zipfile 0. 解压 with zipfile.ZipFile('../data/jaychou_lyr ...

  6. Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php

    Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php 1. Jdk zip 跟apache ant zip 1 2. Apache Ant包进行ZIP文件压缩,upzip ...

  7. Java使用基本JDK操作ZIP文件以及zip文件的加密、解密等功能

    Java使用基本JDK操作ZIP文件 http://blog.csdn.net/zhyh1986/article/details/7723649 Java解压和压缩带密码的zip文件 http://b ...

  8. Atitit. 拉开拉链zip文件 最佳实践实施 java c# .net php

    Atitit. 拉开拉链zip文件 的实现最佳实践 java c# .net php 1. Jdk zip 跟apache ant zip 1 2. Apache Ant包进行ZIP文件压缩,upzi ...

  9. Python与Hack之Zip文件口令破解

    1.需要的库: **import zipfile**import optparse**from threading import Thread(1)zipfile:1.1 zipfile.ZipFil ...

随机推荐

  1. for..of与for..in

    var arr=[1,2,3,5] undefined for(var m of arr) console.log(m)//1,2,3,5 for(var m in arr) console.log( ...

  2. 深度学习之TensorFlow构建神经网络层

    深度学习之TensorFlow构建神经网络层 基本法 深度神经网络是一个多层次的网络模型,包含了:输入层,隐藏层和输出层,其中隐藏层是最重要也是深度最多的,通过TensorFlow,python代码可 ...

  3. 【Python】 python对象的文件化 pickle

    pickle 之前隐隐约约在哪里看到过pickle这个模块但一直没怎么用过.然后让我下定决心学习一下这个模块的原因竟然是[妹抖龙女(男)主在工作中用到了pickle哈哈哈].嗯嗯,不扯皮了.pickl ...

  4. python+pycahrm+windows环境准备

    python安装教程和Pycharm安装详细教程 首先我们来安装python 1.首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org/downloads/),进 ...

  5. Android开发之漫漫长途 XVI——ListView与RecyclerView项目实战

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  6. Python从菜鸟到高手(1):数字

    本文主要内容: 1. 数字的基础知识 2. 大整数 3. 二进制.八进制和十六进制 4 数字的格式化输出 一.数字的基础知识 Python语言与其他编程语言一样,也支持四则运算(加.减.乘.除),以及 ...

  7. 学号:201621123032 《Java程序设计》第13周学习总结

    1:本周学习总结 2:为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 2.1:简述你想为你的系统增加什么网络功能?设计思路是什么? 创建了一个服务器监听8080端口,通过网络助手客户 ...

  8. C语言——总结回顾

    1.当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 答:①当初选择计算机专业是出于一种选择,是一种带着冲 ...

  9. 关于mule中Spring使用中的一个问题

    在mule中连接数据库时,大家通常喜欢使用spring的数据库连接以及bean的配置,但是在使用时会出现一些问题,即bean无法找到,这些,就是需要把bean的id属性改成name属性:可能是因为mu ...

  10. css3动画transition详解2

    transition主要包含四个属性值:执行变换的属性:transition-property,变换延续的时间:transition-duration,在延续时间段,变换的速率变化transition ...