python判断压缩包是否有密码:我爸电脑上有个加密压缩包
更多精彩资讯请点击关注按钮,方便以后持续为您推送此类文章,本文仅在今日头条首发,未发布其他任何平台,未经授权请勿转载。
解锁记忆:老照片中的意外收获
小时候,老爸总是将他的电脑看得比亲儿子还亲。一天,他突然打电话给我,声音中透露出一股迫切:“儿子,帮我看看,有个照片文件夹打不开了,里面有些老照片,都是些年轻时的回忆,不知道怎么回事。”
我心想,这老爸,自己不懂还不找人修。
不过看在他平时照顾我不少的份上,我还是答应了。打开电脑,照着他的指引,果然找到了这个加密的压缩包。我一打开,里面存放着一堆尘封的老照片,岁月的痕迹依稀可见。
我虽然不是计算机专业的,但作为一个热爱折腾的“精灵鬼”,这么有价值的数据,我怎么可能放过呢?于是,我决定帮老爸解开这个加密压缩包,看看有没有意外的收获。
开始寻找思路,对付这种加密文件,我可不是第一次了。
通过各种密码去尝试解压文件,这应该是最常见的方法。那么问题来了,如何去解密压缩包呢?首先,我需要知道使用了什么压缩算法。查阅资料后,我得出结论:zip格式的压缩包可以使用Python的zipFile库进行解压,而rar格式的压缩包则需要使用rarfile库。这两个库早就有大神写好了,我们只需要调用它们的方法即可。
我决定先从zip格式开始尝试,找到一些没有加密的zip文件进行解压,试试手感。
当然,这只是为了熟悉流程,我并不指望从中获得什么意外收获。
python
Copy code
import zipfile
try:
with zipfile.ZipFile('test_file.zip') as zfile:
zfile.extractall(path='./')
print('文件解压成功')
except:
print('失败啦!
')
解压成功!文件和Python代码都放在同一个目录下,看来一切都在我掌握之中。
接下来,我转向了加密的压缩包。密码是什么呢?老爸的口头禅是“姓氏的首字母 123789”,我想试试看。果然,这次解压成功了,文件被释放了出来。
然而,在测试过程中,我还发现了一个问题。如果文件名是中文,解压之后文件名会出现乱码的情况。这可不是我想要的结果。我研究了一下,发现是zipfile库在处理中文文件名时的问题。
我决定动手修改源码,解决这个问题。通过对zipfile.py文件的修改,我让解压后的中文文件名不再乱码。
解决了这个问题之后,我进入了正式的解密环节。老爸的压缩包里肯定有些有价值的东西,我可不能放过。首先,我得确定密码的长度,老爸的密码是4位,那我就先写个程序测试一下。
python
Copy code
import itertools
def extract_file(pwd):
try:
with zipfile.ZipFile('test_chinese.zip') as zfile:
zfile.extractall(path='./', pwd=pwd.encode('utf-8'))
print('文件解压成功')
return True
except Exception as e:
print('失败啦!
', e)
return False
def get_pwds(my_password_str):
for i1 in range(len(my_password_str)):
for i2 in range(len(my_password_str)):
for i3 in range(len(my_password_str)):
for i4 in range(len(my_password_str)):
yield my_password_str[i1] my_password_str[i2] my_password_str[i3] my_password_str[i4]
if __name__ == '__main__':
my_password_str = "abcdefghijklmnopqrstuvwxyz0123456789"
for pwd in get_pwds(my_password_str):
print("正在测试密码:", pwd)
yield_pwd = pwd
ret = extract_file(yield_pwd)
if ret:
print("解密成功,密码是", yield_pwd)
break
经过测试,解密成功了!
密码是“aaaf”。但是,我意识到这种方法并不是最高效的,毕竟老爸的密码可能不止4位,这样一个个尝试会很耗时。于是,我找到了Python中内置的一个迭代器,可以用来从一个字符串中生成指定位数的密码。这样,我就能快速生成不同长度的密码,提高破解效率。
python
Copy code
import itertools
my_pwd_str = 'abcdefghijklmnopqrstuvwxyz0123456789'
def ret_pwd(nums):
for x in itertools.permutations(my_pwd_str, nums):
yield ''.join(x)
if __name__ == '__main__':
my_password_str = "abcdefghijklmnopqrstuvwxyz0123456789"
for pwd in ret_pwd(4):
print(len(pwd))
print("正在测试密码:", pwd)
yield_pwd = pwd
ret = extract_file(yield_pwd)
if ret:
print("解密成功,密码是", yield_pwd)
break
优化后的代码大大提高了破解效率,同时也增加了灵活性,可以动态控制密码的长度。
在解密的过程中,我也思考了一些扩展思路。密码的获取不一定非得自己生成,也可以利用密码本,逐行读取密码进行尝试。此外,如果一个个文件解密太慢,可以尝试多线程或多进程破解
,一个进程读一个密码本,每个进程下再启用几个线程,分段解析密码,以提高解密速度。
然而,尽管我已经优化了代码并尝试了多种方式,连续轮询了两天,文件还是未能解开。这时,我决定采取更加直接的方法,从老爸那里找寻突破口。
我“逼问”了一下老爸,询问了一些他常用的密码,特别是他的银行卡密码。这成为了一个重要的突破点。
经过多次尝试,最终在一周后,文件终于解开了。密码并不复杂,是老爸的姓氏的首字母加上一串数字。看来,我之前多虑了一些,但也因此有了更深入的体会和收获。
通过这个经历,我不仅学会了如何使用Python库进行文件的解密和处理,还深刻体会到了技术探索的乐趣。在这个过程中,我不断尝试、优化,寻找不同的思路和方法,最终解锁了宝贵的回忆。
在这个数字化的时代,数据和信息承载着无限的可能。通过技术手段,我们能够从封闭的数据中获取有趣的信息,挖掘出更多的价值。这次经历让我更加热爱技术的魅力,也坚定了我在这个领域继续探索的决心。
如果你也有类似的经历,欢迎在评论区分享你的故事。技术的世界充满了未知,让我们一起探索前行,解锁更多的可能性吧!
记得收藏本文,未来也许会有一天,你会用到这些技巧。
真诚感谢您阅读本文,诚邀您点击一下“关注”按钮,方便以后持续为您推送此类文章。
- 04-02缅甸琥珀盘玩以后有什么变化?文玩琥珀与柯巴树脂之间的纠缠是琥珀界的百年魔咒
- 10-01看面相看自己有没有癌症:体内有疾,面相可知出现4种面相
- 09-30听上去很难其实很简单的钢琴曲:如果一辈子只听一首钢琴协奏曲
- 10-12免税店石家庄 河北省首家线下免税体验店
- 12-07实况足球2013如何要球?实况足球2013怎么控向射门
- 04-24二维码扫码器为什么一直扫码?扫码成付费唯一选择二维码何以成了
- 02-10超级学校霸王1993电影 电影播放单里必收藏的电影
- 05-29推荐超好看闺蜜头像,超好看的闺蜜头像
- 01-28聊了半天发现他有女朋友,终于前两天他点到了他女朋友
- 12-10考试报名时间表及入口:这个考试时间定了1月14日起报名
- 04-1918款福克斯升级全液晶仪表盘:福克斯,旋钮换挡高级花瓣轮圈超帅
- 01-02小升初常考的古诗词运用:小升初难点总结古诗分类
- 12-08ds豪华版试驾视频:原汁原味的法式豪华座驾
- 10-20华为nova 10有什么样的性能和亮点?华为nova10上手体验如何一文告诉你答案
- 04-11考研保护第一志愿不歧视的院校:保护一志愿神仙院校们
- 03-01你是最成功的表情包:表情包失败乃成功之母
热门
推荐
- 1动漫游戏场景道具设计原画效果图片249
- 2初中音乐业务学习心得220
- 3六年级下英语手抄报412
- 4关于如愿以偿的造句371
- 5高二地理选修三第四单元旅游地理试题及答案426
- 6学院学习《廉洁从政准则》实施方案311
- 7结婚请假条范文423
- 811月大学生入党申请书3000字311