解压缩收费?
有人咨询我了这样一个问题:“最近,我下载了一些压缩文件,但是我发现,我没办法解压缩,它要求我输入密码,我已经下载了好几个解压缩软件了,都不能用,这是不是就是想问我要钱?以前我不用交钱就可以解压缩文件啊,为什么现在不行了呢?”
听到这个问题,我意识到,这个咨询的人对于电脑知识的认识可能不多,我耐心为其解释,”不是这样的,输入密码,不是因为解压缩软件要会员费才能解压缩,而是压缩文件的人设置了密码,要知道密码才能解压。“
虽然,我觉得我讲的是比较清楚的,但是,很明显,对方可能还是没听懂,他仍然非常困惑,”那不是要我交钱,为什么我下载的文件都不能解压呢?”
我继续解释,“因为创建压缩包的人设置了密码,所以需要密码。”
他仍然不懂,“什么密码?我以前解压缩都没用过密码啊?密码哪里来,要开会员给吗?还是那个网盘提取码吗?”
好吧,看来只是讲,是没办法讲明白了,我必须完整演示一次了。
压缩文件
软件下载
通常,我们需要一个解压缩软件,才能够进行解压缩,解压缩软件通常是不需要花钱的,例如,一个非常好用的压缩软件,7-zip官网地址
打开以后看到的应该是像这样的页面:
选择对应的版本,点击download下载,然后按照提示进行安装即可。
压缩文件设置密码
安装7-zip以后,右键选择要压缩的文件,找到7-Zip的选项,然后选择,“添加到压缩包”。
此时,就可以添加密码,添加密码以后,以后就需要密码才能够解压文件。
python解压zip
zipfile
通过zipfile库,可以进行zip包的解压
import zipfile
import os
def unzip_file(zip_path, password, extract_to="."):
if not zipfile.is_zipfile(zip_path):
print(f"{zip_path}不是一个zip文件")
return
with zipfile.ZipFile(zip_path, "r") as zip_ref:
password_bytes = password.encode("utf-8")
try:
zip_ref.extractall(path=extract_to, pwd=password_bytes)
print(f"文件已解压到:{os.path.abspath(extract_to)}")
except RuntimeError:
print("解压失败,密码可能不正确")
忘记密码
我们常常遇到这样一种情况,当初为了保护自己的文件安全,给压缩包设置了密码,但是过了一段时间,忘记了,此时又开始追悔莫及,“真是糟糕啊,我为什么要乱设密码呢?密码到底是多少?”,但是苦思冥想就是记不起来了,那么还有什么补救措施吗?
正常来说,是没有办法的,如果忘记了密码,那么压缩文件可能就没办法找回了,不过,如果密码特别简单,可能被“弱口令爆破”的方法破解。
弱口令爆破的原理就是,通过程序自动去测试解压密码,因为程序的运行速度很快,而压缩文件又没有特殊的保护限制(例如,3次输错锁定禁止尝试),那么在这种情况下,如果你的密码过于简单,就可能被程序试验出来,从而达到所谓“破解压缩包密码“。
下面,是一个可能的实现,需要提供一个包含常用密码的列表:
import zipfile
import os
def unzip_file_with_password_list(zip_path, password_list, extract_to="."):
if not zipfile.is_zipfile(zip_path):
print(f"{zip_path}不是一个zip文件")
return
with zipfile.ZipFile(zip_path, "r") as zip_ref:
for password in password_list:
try:
zip_ref.extractall(path=extract_to, pwd=password.encode("utf-8"))
print(f"文件已解压到:{os.path.abspath(extract_to)}")
print(f"密码是:{password}")
return
except (RuntimeError, zipfile.BadZipFile):
pass
else:
print("密码没有被找到")
zip_file_path = "1.zip"
password_list = list([str(i) for i in range(10000)])
output_dir = "output_folder"
unzip_file_with_password_list(zip_file_path, password_list, output_dir)
安全提示
虽然在现代较为安全的加密实现下,使用复杂密码进行压缩文件是足够安全的。但是在早期,一些加密方式较为简单,可能容易被利用或找到漏洞,因此,早期的加密压缩包可能有其他能够打开的方式。这提示我们,古老的加密压缩包可能是不够安全的,而且,我们也不应该使用古老的压缩软件进行加密。
有这样一个问题:“如果我把密码设置的非常简单,那么文件就不安全。如果我设置的非常复杂,等到我自己忘了密码,就没办法通过弱口令爆破找回了,该怎么办?”
这真是一个复杂的问题,首先,我们需要明确,既然我们已经决定要保护好文件了,那么一定不要使用弱口令,应该使用具有足够安全性的复杂密码。但是复杂密码的遗忘确实可能导致不能找回,这就说明了,我们必须要想办法记住我们设置的密码,否则就会有很大的麻烦。
还有这样一个问题,“在多年前,我在某个网站下载了一个文件,我清楚的记得,那个网站的地址就是压缩包的密码,但是时至今日,网站的地址我早就忘记了,还有可能弱口令爆破吗?”
如果我们假设这个网站的地址是以www.开头的,.com作为结尾的,那么确实,这个密码的长度会很长,即使网站的域名不算复杂,但是如果将整个密码作为弱口令来尝试的话,那么可能确实难以做到。但是,在这种情况下,如果可以清楚的记得密码的一部分,我们可以修改弱口令爆破的实现,将这一部分写入到程序中,这样,就只需要尝试原本域名的部分即可。
注意:未经许可,尝试破解他人的加密文件可能是违法行为,因此,弱口令爆破的方式仅适用于在忘记了自己的文件密码的情况下,有一个尝试的可能,请勿用于非法用途。