Как открыть WinZip защищенный паролем архив? - PullRequest
1 голос
/ 13 марта 2020

Я знаю, что расшифровка - это обширный мир, в котором я новичок, но у меня есть файл WinZip, который я могу легко открыть в WinZip с известным паролем через пользовательский интерфейс WinZip.

Однако, поставляя тот же пароль, я не могу открыть его в Python. Я подозреваю, что кодировка, возможно, в AES, но я не хочу привлекать стороннюю библиотеку для открытия файла. Есть ли какой-нибудь стандарт для открытия защищенных паролем файлов WinZip в Python? Я пробовал другой код c кодировки в ZipFile.

from zipfile import ZipFile

with ZipFile(r'C:\Users\user\Desktop\Data.zip') as zf:
    pas = 'myPass'
    res = pas.encode('utf-32-le')
    zf.extractall(pwd=res)
zf
RuntimeError: Bad password for file ...

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Сначала необходимо определить, какой тип шифрования использует ZIP-файл. Там может быть инструмент отчетности в самом WinZip, который скажет вам. У меня его нет, поэтому не знаю.

Если у вас есть доступ к любой из служебных программ zip из командной строки, вы можете легко это выяснить.

Во-первых, если у вас есть Infozip доступна реализация unzip, запустите ее с параметром -lv. Если у вас есть очень новая версия unzip, и она показывает AES_WG в столбце Метод, ваш файл зашифрован AES.

$ unzip -lv my.zip
Archive:  /home/paul/perl/ext/Gzip/IO-Zippo/scratch/sample-zip/7z/7z-win32-aes128.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
    1933  AES_WG      884  54% 04-15-2010 22:26 00000000  0001-perl-74088.patch
--------          -------  ---                            -------
    1933              884  54%                            1 file

Если вы unzip старше, наличие строки Unk:099 в столбце Метод означает, что ваш файл зашифрован AES.

$ unzip -lv my.zip
Archive:  IO-Zippo/scratch/sample-zip/7z/7z-win32-aes128.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
    1933  Unk:099     884  54% 2010-04-15 22:26 00000000  0001-perl-74088.patch
--------          -------  ---                            -------
    1933              884  54%                            1 file

Другой альтернативой является использование zipdetails (полное раскрытие, я автор zipdetails). Ключевым моментом, который нужно искать, является строка Compression Method 0063 'AES Encryption'

$ zipdetails my.zip

0000 LOCAL HEADER #1       04034B50
0004 Extract Zip Spec      33 '5.1'
0005 Extract OS            00 'MS-DOS'
0006 General Purpose Flag  0001
     [Bit  0]              1 'Encryption'
0008 Compression Method    0063 'AES Encryption'
...

Если выясняется, что у вас есть шифрование AES и вам нужен python способ чтения файла, стандартный подход zipfile подойдет не работа. В настоящее время zipfile поддерживает только слабое шифрование.

Другие python способы чтения Zip-файлов, зашифрованных AES, см. Python unzip Зашифрованный файл AES-128

0 голосов
/ 13 марта 2020

Передайте пароль как обычно, без кодировки, он может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...