利用Python暴力破解zip文件口令的方法详解


Posted in Python onDecember 21, 2017

前言

通过Python内置的zipfile模块实现对zip文件的解压,加点料完成口令破解

zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了。ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的。

比如要读取一个Python zipfile 模块,这里假设filename是一个文件的路径:

import zipfile 
z = zipfile.ZipFile(filename, 'r') 
for i in z.infolist(): 
print i.file_size, i.header_offset

这里使用了z.infolist(), 它返回的就是压缩包内所有文件的信息,就是一个ZipInfo的列表。一个ZipInfo对象中包含了压缩包内一个文件的信息,其中比较常用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。

准备阶段

首先你需要一个压缩文件,并且给它加上密码,样子长成这样

利用Python暴力破解zip文件口令的方法详解

利用Python暴力破解zip文件口令的方法详解

然后你就成功Get了一个自带密码的压缩文件,好了,这就结束了

暴力破解

首先我们先知道下什么是暴力破解,其实简单粗暴点来说,就是通过轮循的方式比对,我们一定都知道MD5加密,那么MD5是不可逆的,那网上那些所谓的MD5解密的网站是怎么做到的,其实也是暴力破解的方式。

举个栗子,你通过MD5加密了一段字符串 str="abc" 加密后的结果为 "3cd24fb0d6963f7d" 这么一长串别人肯定看不懂,MD5解密网站怎么做的,他们自己没事干的时候开始瞎试,把aa/cc/bb/abc 啥的都开始用MD5加密一遍,存到自己的数据库里,当你去查询的时候,他们会根据你提供的 "3cd24fb0d6963f7d" 在数据库里面比对,如果巧合的话就能找不到,大部分情况你的加密字符串稍微复杂点都找不到,这就是所谓的MD5解密,也就是暴力破解了

上代码

import zipfile #导入模块,它是做压缩和解压缩的
password="123" #我们设定的口令
zfile = zipfile.ZipFile("test.zip") #要解压缩的压缩包
zfile.extractall(path='C:\\Users\\Administrator\\Desktop\\', members=zfile.namelist(), pwd=password.encode('utf-8'))
#进行解压缩操作,path为输出的路径

我们运行一下上面的代码(当然你的加密口令要为123),会发现在桌面上已经把test.zip解压出来了,完美ending,不对还差一个暴力破解呢,自己知道密码还要破解啥有用,别着急,继续往下看

import zipfile 
zfile = zipfile.ZipFile("test.zip")
passFile=open('pwd.txt') #读取你设定的密码文件
for line in passFile.readlines():
  try:
    password = line.strip('\n')
    zfile.extractall(path='C:\\Users\\Administrator\\Desktop\\', members=zfile.namelist(), pwd=password.encode('utf-8'))
    break
  except:
    print("又错了")

pwd.txt里面内容如下

1223
abc
aaa
123

好了,这就完成了zip文件口令的暴力破解,其实只是很巧妙的利用了try except异常机制,当解压正常的时候就正常密码正常,解压失败会报出异常,动手试试

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python使用urllib模块和pyquery实现阿里巴巴排名查询
Jan 16 Python
python中的多重继承实例讲解
Sep 28 Python
使用Python的内建模块collections的教程
Apr 28 Python
简单介绍Python中的try和finally和with方法
May 05 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
Oct 29 Python
python3实现表白神器
Apr 09 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
利用PyTorch实现VGG16教程
Jun 24 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
python某漫画app逆向
Mar 31 Python
Python人脸识别初探
Dec 21 #Python
python中判断文件编码的chardet(实例讲解)
Dec 21 #Python
python 设置文件编码格式的实现方法
Dec 21 #Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 #Python
Python 查看文件的编码格式方法
Dec 21 #Python
python利用OpenCV2实现人脸检测
Apr 16 #Python
Python判断文件和字符串编码类型的实例
Dec 21 #Python
You might like
php学习之 数组声明
2011/06/09 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
Python decimal模块使用方法详解
2020/06/08 Python
web字体加载方案优化小结
2019/11/29 HTML / CSS
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
先进个人获奖感言
2014/01/24 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
PyTorch 如何自动计算梯度
2021/05/23 Python
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏