借用Python迭代器itertools暴力破解压缩文件密码 您所在的位置:网站首页 消费者权益保护法教案成人 借用Python迭代器itertools暴力破解压缩文件密码

借用Python迭代器itertools暴力破解压缩文件密码

#借用Python迭代器itertools暴力破解压缩文件密码| 来源: 网络整理| 查看: 265

〇、开篇

人是健忘的。很多琐事,忘就忘了,没什么大不了。

但,有些琐事,却忘不得。

像是媳妇生日、私房钱藏匿点、文件解压密码什么的。

好在媳妇可以哄、私房钱数额小。不过多哄哄、多找找的事。

那解压密码怎么办呢?正所谓:硬盘有价,数据无价

别着急,套路差不多。和哄媳妇一个理。

重复穷举、法力无边

就以Python自带的zipfile、itertools标准库为例,为朋友们演示吧。

一、itertools.product()

利用Python标准库itertools的product函数,就能穷举指定字符串的排列组合了。

https://docs.python.org/zh-cn/3/library/itertools.html

1、product()

itertools.product方法可以返回一个笛卡尔积元组,只要把元组拼接成字符串,就能穷举出所有字符串元素的排列组合。

2、product函数演示

假设,字符长度为2,构成字符的元素为‘ABCD’,product就会穷举由‘ABCD’构成的所有2位字符。

示例:

In [1]: from itertools import product ​ In [2]: keys = product('ABCD', repeat=2) ​ In [3]: for key in keys: ...: key_str = ''.join(key) ...: print(key_str) ...: AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD ​ In [4]:

实验结论:

把构成密码的字符串元素,进行排列穷举。就能命中正确密码。

二、zipfile

Python在其标准库中提供了处理zip文件的zipfile。利用zipfile库的extract函数,就能解压文件。

在解压文件的过程中,传入 itertools.product() 穷举的密码,就可以达到暴力破解的效果了(破解时间和密码的复杂程度正相关)

这里不再赘述zipfile的基本用法。不熟悉zipfile用法的朋友,可以移步至Python官网参考相关Documents,

当然,rar和7z文件,Python也有第三方模块支持,相关方法,大同小异。

三、密码破解实验

操作系统: MacOS 10.15.7

实验路径:~/Coding/Python/CompressPy

压缩文件:test.zip

解压密码:huawei

压缩文件包含内容:hello.txt

Hello Python1、准备压缩文件

进入相关目录

cd ~/Coding/Python/CompressPy

建立文本文件

vim hello.txt i Hello Python :x

压缩并加密

zip -r -P huawei test.zip hello.txt

操作演示:

2、Python暴力破解

Python破解zip解压密码示例

import zipfile import itertools ​ # 打开压缩文件 zip_file = zipfile.ZipFile('./test.zip') # 把压缩文件内,所含的单个文件放入列表 zip_list = zip_file.namelist() ​ # 有可能构成密码字符(穷举字典) chars_dict = 'aehiuw' # 这里repeat理解成密码长度为6位,当然可以用循环定制密码长度范围,这里简单处理 passwords = itertools.product(chars_dict, repeat=6) ​ # 用一个列表,来装itertools穷举出的密码字符串 list_password = list() ​ # 把itertools.product方法穷举的密码,类型转换成字符串,放入密码列表 for password in passwords: password = ''.join(password) list_password.append(password) ​ # 把文件列表中的文件取出来,尝试用密码列表中的密码解密 for f in zip_list: # 从密码列表中循环去除密码测试解密 for key in list_password: # 成功解密后,把正确的解压密码打印出来,并结束循环 try: zip_file.extract(f, pwd=key.encode('utf-8')) print(f'you password is : {key}') break # 如果密码错误,打印报错信息 except Exception as Error: print(Error)

破解效果展示:

四、后记

第三节的Python代码,有很大的优化空间。

比如:

可以用擅长cpu-base的多进程来加快破解速度。

可以用循环来控制密码的长度范围。

for times in range (6, 17): itertools.product(keys, repeat = times)

这里就不再赘述了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有