首页 > 解决方案 > 如何打开 WinZip 密码保护的存档?

问题描述

我知道解密是一个广阔的世界,我是新手,但我有一个 WinZip 文件,我可以通过 WinZip UI 使用已知密码在 WinZip 中轻松打开。

但是,提供相同的密码,我无法在 Python 中打开它。我怀疑编码可能在 AES 中,但我不想让非本机库打开文件。是否有任何标准可以在 Python 中打开受密码保护的 WinZip 文件?我已经在 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 ...

标签: pythonencryptionpassword-protectionzipfilewinzip

解决方案


您首先需要确定 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只支持弱加密。

有关读取 AES 加密的 Zip 文件的其他 python 方法,请参阅Python unzip AES-128 encrypted file


推荐阅读