2013-03-21 246 views
2

有沒有辦法直接用python解壓縮AES-128加密文件,因爲ZipFile引發錯誤密碼錯誤。如果我使用7zip它可以工作,所以密碼是正確的,但是再次需要將7zip安裝爲依賴項。Python解壓縮AES-128加密文件

我的嘗試:

from ZipFile import ZipFile 
zip = ZipFile('test.zip') 
zip.extractall(pwd='password') 

這將引發錯誤密碼例外。

檢查與7zip的

7z l -slt test.zip 

這將返回文件:

Encrypted = + 
Method = pkAES-128 Deflate 

回答

5

Python標準庫中的zip文件模塊只支持CRC32加密的ZIP文件(在這裏看到:http://hg.python.org/cpython/file/71adf21421d9/Lib/zipfile.py#l420)。所以,一些第三方依賴沒有辦法解決。

最簡單的方法是隻安裝7zip的,並使用subprocess模塊從標準庫調用的命令行工具7z

import subprocess 
subprocess.call(["7z", "x", "-ppassword", "test.zip"]) 

另一種選擇將是Python模塊「PyLzma」,這也可以處理AES加密的7zip檔案:https://github.com/fancycode/pylzma。它不直接支持解密經典zip文件,但可以使用它的例程編寫自己的解壓縮函數。