Is there a way to decompress an AES-128 encrypte file directly with python, since ZipFile throws a Bad Password error. If i use 7zip it works, so the password is correct, but then again 7zip needs to be installed as a dependency.
What i tried:
from ZipFile import ZipFile
zip = ZipFile('test.zip')
zip.extractall(pwd='password')
This throws the Bad Password exception.
Checking the file with 7zip
7z l -slt test.zip
This returns:
Encrypted = +
Method = pkAES-128 Deflate
You can use the library pyzipper: https://github.com/danifus/pyzipper. It works nearly the same as Python's zipfile:
import pyzipper
with pyzipper.AESZipFile('my_archive.zip') as f:
f.pwd = b'myPassword'
print(f.infolist())
file_content = f.read('testfile.txt')
The zipfile module from the Python standard library supports only CRC32 encrypted zip files (see here: http://hg.python.org/cpython/file/71adf21421d9/Lib/zipfile.py#l420 ). So, there is no way around some 3rd party dependency.
The easiest way would be to just install 7zip and call the commandline utility 7z
using the subprocess
module from the standard lib:
import subprocess
subprocess.call(["7z", "x", "-ppassword", "test.zip"])
Another option would be the python module "PyLzma" which can also handle AES encrypted 7zip archives: https://github.com/fancycode/pylzma . It doesn't directly support decrypting classic zip files but you could use its routines to write your own decompressor function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With