当ZIP文件的压缩密码已知时,可以通过调用zipfile库进行解压:
importzipfile
zip_file=zipfile.ZipFile(r'C:\test.zip')
#文件的路径与文件名
zip_list=zip_file.namelist()
#得到压缩包里所有文件
forfinzip_list:5
zip_file.extract(f,r'C:\Test',pwd="123".encode("utf-8"))
#循环解压文件到指定目录6zip_file.close()
#关闭文件,必须有,释放内存
当压缩包非加密时,只需修改上面第5行代码:zip_file.extract(f,r'C:\Test')#循环解压文件到指定目录
但是博主在进行测试的时候,发现了一个问题,调用zipfile对传统加密的zip文件进行解压可以成功,但是当zip为非传统加密方式时无法解压,这里的传统加密指的什么呢?大家使用版本比较新的WinRAR进行zip加密压缩的时候,下面会有一个“ZIP传统加密'的选项:
当博主不勾选这个选项生成压缩包进行解压测试的时候,发现无法解压:
后查询资料并咨询前辈,得出如下解释:默认情况下,WinRAR在CTR模式下使用AES-256加密ZIP文件,而传统加密是通过CRC32加密,也即ZIP 2.0传统加密算法,虽然AES-256比ZIP 2.0传统加密算法安全得多,但它可能与一些旧的解压软件不兼容,而Python标准库中的zipfile模块只支持CRC32加密的zip文件,所以不采用传统加密方式是无法通过zipfile库进行解压的。
后来博主了解到,Python有个pyzipper库可以很好的兼容代替zipfile,可以读写AES加密的zip文件,目前博主还没有进行尝试