Сначала необходимо определить, какой тип шифрования использует 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