嗨玩手游网

我爸电脑上有个加密压缩包,我给用 Python 给解开了

此篇文章,只做今日头条首发创作,未发布其他任何平台,原创不易,抄袭、洗稿必将深究。

家人之间,总有一些私密的东西需要共享,这次,我又一次被老爸的一项任务牵扯进来。他告诉我说有一个照片文件夹打不开了,希望我能过去看看。当我打开那个文件夹时,发现里面居然是一个加密的压缩包,里面封存了许多旧时的照片。这无疑激起了我的好奇心,我想知道里面的照片是些什么,也许还有一些意外的收获。

作为家里的“电脑专家”,我觉得我有责任帮助老爸解开这个谜题。首先,我需要找到解密压缩包的思路。我考虑了一下,决定尝试通过各种可能的密码去解压文件。我打算先从一些常用的密码开始尝试,如果不行,就考虑使用程序自行运算或者找密码本。

接下来,我需要找到合适的工具来解压不同类型的压缩文件。对于zip格式的文件,Python内置了zipfile库,而对于rar格式的文件,我需要安装rarfile库。

这两个库提供了相应的方法来解压文件,我只需要调用它们的方法即可。

我决定先从zipfile库开始尝试,通过解压一个没有密码的文件,来熟悉一下解压的过程。我创建了一个测试文件,尝试用zipfile库解压它。接着,我尝试了英文、数字和中文命名的文件,以确保库的适用性。

python

Copy code

import zipfile

try:

with zipfile.ZipFile('test_file.zip', 'r') as zfile:

zfile.extractall(path='./')

print('文件解压成功')

except:

print('失败啦!

')

成功解压了文件之后,我尝试解压带密码的文件。我设置了密码为"1234",然后用相同的方法解压。这次,我需要在解压的过程中提供密码。

python

Copy code

import zipfile

try:

with zipfile.ZipFile('file_with_password.zip', 'r') as zfile:

zfile.extractall(path='./', pwd=b"1234")

print('文件解压成功')

except:

print('失败啦!

')

在测试的过程中,我还发现了一个问题,如果文件名是中文,解压之后文件名会出现乱码的情况。为了解决这个问题,我需要修改zipfile库的源码,将乱码问题修正。

随着思路的整理,我开始了真正的解密任务。老爸的压缩包很有价值,我不能让它始终保持加密状态。我开始考虑密码的问题,由于不知道密码的位数,我决定从4位数开始尝试。我编写了一个密码生成函数,生成可能的密码组合,然后依次尝试解密文件。

python

Copy code

import zipfile

import itertools

def extract_file(pwd):

try:

with zipfile.ZipFile('encrypted_file.zip', 'r') as zfile:

zfile.extractall(path='./', pwd=pwd.encode('utf-8'))

print('文件解压成功')

return True

except Exception as e:

print('失败啦!

', e)

return False

def generate_passwords(my_password_str):

for pwd in itertools.permutations(my_password_str, 4):

yield ''.join(pwd)

if __name__ == '__main__':

my_password_str = "abcdefghijklmnopqrstuvwxyz0123456789"

for pwd in generate_passwords(my_password_str):

print("正在测试密码:", pwd)

if extract_file(pwd):

print("解密成功,密码是", pwd)

break

然而,事情并不像我想象的那么简单。

几天的多线程尝试后,我仍然没有解开压缩包。我开始怀疑,是不是密码位数不是固定的4位呢?我不得不转变思路,决定从老爸那里找到一些线索。

最终,我从老爸那里得到了一个重要的线索:他的银行卡密码。我想,如果密码是由姓氏的首字母加上一些常见的数字组成,那解密的可能性会大大提高。于是,我根据这个线索修改了密码生成函数,开始尝试各种可能的组合。

python

Copy code

import zipfile

import itertools

def extract_file(pwd):

try:

with zipfile.ZipFile('encrypted_file.zip', 'r') as zfile:

zfile.extractall(path='./', pwd=pwd.encode('utf-8'))

print('文件解压成功')

return True

except Exception as e:

print('失败啦!

', e)

return False

def generate_passwords(my_password_str, nums):

for pwd in itertools.permutations(my_password_str, nums):

yield ''.join(pwd)

if __name__ == '__main__':

my_password_str = "abcdefghijklmnopqrstuvwxyz0123456789"

for pwd in generate_passwords(my_password_str, 5): # 姓氏首字母 + 123789

print("正在测试密码:", pwd)

if extract_file(pwd):

print("解密成功,密码是", pwd)

break

经过一周的努力,我终于解开了压缩包,密码竟然是这么简单:姓氏的首字母 + 123789。

我感到有些多虑了,但也为最终的成功感到欣慰。这次经历让我更加深刻地体会到,解密并不总是那么轻松,需要细心和耐心。

总结起来,这次任务让我不仅了解了文件加密和解密的基本原理,还深刻体会到了解密

的艰难与耗时。在这个过程中,我不仅学会了使用Python的压缩库来解压文件,还深入了解了密码生成、多线程处理和源码修改等技巧。

通过这次经历,我还思考了一些更加高效的解密思路。

例如,密码的获取不一定非要自己生成,还可以通过密码本来进行尝试。此外,解密过程中使用多线程或多进程破解,可以提高解密的速度,使得解密过程更加高效。

事情的结果虽然出乎意料,但也给了我很多收获。我不仅学到了关于密码和加密的知识,还锻炼了自己的解决问题的能力。在技术的世界里,每一个看似简单的任务都可能隐藏着许多挑战,而解决这些挑战正是技术人员不断成长的动力之一。

更多资讯
游戏推荐
更多+