zoukankan      html  css  js  c++  java
  • Python实现加密的ZIP文件解压(密码已知)

    博主在上篇博文https://www.cnblogs.com/kangbazi666/p/13646308.html介绍了《Python实现加密的RAR文件解压(密码已知)》后,又尝试了ZIP文件的解压方法,下面开始分享。

    当ZIP文件的压缩密码已知时,可以通过调用zipfile库进行解压:

    1 import zipfile
    2 zip_file = zipfile.ZipFile(r'C:	est.zip')  # 文件的路径与文件名
    3 zip_list = zip_file.namelist()  # 得到压缩包里所有文件
    4 for f in zip_list:
    5     zip_file.extract(f, r'C:Test', pwd="123".encode("utf-8"))  # 循环解压文件到指定目录
    6 zip_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文件,目前博主还没有进行尝试,有兴趣的小伙伴可以去了解一下:https://www.cnpython.com/pypi/pyzipper

  • 相关阅读:
    是什么意思
    Hql查询
    java的LINQ :Linq4j简明介绍
    Sqlite内存数据库
    ACE中的Proactor介绍和应用实例
    mysql的锁表问题
    消息:'null'为空或不是对象
    FusionChart中引入图类型和数据源方法
    实现FusionChart动态获取数据(二)
    JSP页面解决文件路径方法
  • 原文地址:https://www.cnblogs.com/kangbazi666/p/13666783.html
Copyright © 2011-2022 走看看