Python實現加密的ZIP文件解壓(密碼已知)

博主在上篇博文http://www.javashuo.com/article/p-oropfqir-nx.html介紹了《Python實現加密的RAR文件解壓(密碼已知)》後,又嘗試了ZIP文件的解壓方法,下面開始分享。html

當ZIP文件的壓縮密碼已知時,能夠經過調用zipfile庫進行解壓:python

1 import zipfile 2 zip_file = zipfile.ZipFile(r'C:\test.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庫進行解壓的。spa

後來博主瞭解到,Python有個pyzipper庫能夠很好的兼容代替zipfile,能夠讀寫AES加密的zip文件,目前博主尚未進行嘗試,有興趣的小夥伴能夠去了解一下:https://www.cnpython.com/pypi/pyzippercode

相關文章
相關標籤/搜索