利用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数据结构链表之单向链表(实例讲解)
Jul 25 Python
python如何使用unittest测试接口
Apr 04 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
python+mysql实现学生信息查询系统
Feb 21 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 Python
Python IO文件管理的具体使用
Mar 20 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
ThinkPHP中ajax使用实例教程
2014/08/22 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
初识Javascript小结
2015/07/16 Javascript
基本DOM节点操作
2017/01/17 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
windows下python连接oracle数据库
2017/06/07 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
Java的类与C++的类有什么不同
2014/01/18 面试题
优秀毕业大学生推荐信
2013/11/13 职场文书
迟到检讨书400字
2014/01/13 职场文书
大学生旷课检讨书
2014/01/22 职场文书
售房协议书
2014/08/19 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python