很多时候,为了防止文件在传输过程中遗失,会把文件压缩后加个密码。
最痛苦的不是文件丢失,最痛苦的是过了一段时间自己也不记得密码了,然后你想看看当初你发了什么的时候,,密码忘记了
但是你会Python之后,一些简单的密码,常规的密码都不在话下,特别是纯数字的,根本不用多线程就可以很快破解。干货如下:
为了满足这个示例,我们需要自己建一个zip的文件,密码为1234
我们用最笨的方法,穷举(就是瞎跑的方式)。因为这里知道了条件是1234,我们做示例就尝试从1000~2000
首先我们要导入zipfile模块。然后定义打开的文件为zip_crack.zip(跟代码同目录的不需要写完整路径)
file = zipfile.ZipFile(r'zip_crack.zip')
我们直接用zipfile的extractall的方式去释放文件,可以想象如果密码错误,文件是释放不出来的,并且还会报一个错误,如下,虽然可以读到文件例表,但是我们并不能释放出正确的文件
因此我们加一个try,这样有异常的时候可以继续运行,但是一旦try成功,也就是文件释放成功,我们需要中断for循环,因此我们需要用到break。不然都已经破解成功了,程序还要继续,浪费资源,而且电脑运行太快,你肉眼不跑完根本不知道已经破解成功了,运行界面如下,运行下来,4位数的2000个密码可以说秒完成。
当程序停止的时候,你可以在程序目录看到这个文件test_crack.txt
为什么是在程序目录,因为我在这句话里定义了释放的路径,一是这个path
file.extractall(path=r'./',pwd=bytes(str(i).encode('utf-8'))),可以看到这个extractall的参数里有path,members,pwd
为什么这里的pwd是这么繁琐的,而不是直接用上面for循环里的i
这是因为这个pwd必须为字节数(byte),直接用i会报错,
我们先把int转成str,然后还要转码能utf-8,最后再转成bytes
领取专属 10元无门槛券
私享最新 技术干货