Как я могу распаковать файл, зашифрованный с помощью алгоритма, отличного от PKZIP в Python3? - PullRequest
0 голосов
/ 04 мая 2018

Я хочу распаковать архивы, защищенные паролем, с помощью Python 3. Я знаю пароль, но кажется, что в стандарте zip есть несколько алгоритмов шифрования.

Сначала я создаю zip-архив со стандартным Ubuntu Archive Manager 3.16.5, используя пароль «1». Затем я запускаю следующий код:

import zipfile

zip_file = zipfile.ZipFile('archive.zip')
zip_file.extractall(pwd=b'1')

В результате я получаю RuntimeError: ('Bad password for file', <ZipInfo filename='contents.txt' compress_type=99 filemode='-rw-rw-r--' external_attr=0x8020 file_size=40 compress_size=60>).

Когда я запускаю Archive Manager для распаковки, он работает нормально. Однако, как только я пытаюсь unzip, он не в состоянии выполнить работу:

$ unzip -P 1 archive.zip 
Archive:  archive.zip
    skipping: contents.txt            need PK compat. v5.1 (can do v4.6)

Насколько я понимаю, проблема в том, что unzip использует алгоритм PKZIP , в то время как libarchive широко используется 7zip, и Archive Manager обычно предпочитает AES для шифрования (и имеет хорошую причину безопасности ).

Итак, как выбрать алгоритм разархивирования в Python? Или мне не нужно заботиться о самом формате zip, найти дешифратор AES и каким-то образом подключить его к unzip позже?

Я рассматривал возможность использования 7zip в вызове bash, но это создает дополнительные проблемы при взаимодействии с ОС (что если у исполняющей машины его нет?). Я также искал порт libarchive для Python 3 (а именно, пакет python3-libarchive-c) - он разработан отдельно от реализации C и не поддерживает шифрование / дешифрование на сегодняшний день.

1 Ответ

0 голосов
/ 15 июля 2019

Вы можете использовать библиотеку pyzipper для распаковки AES-зашифрованных zip-файлов.

...