如何打开 WinZip 密码保护的存档?
How to open WinZip password protected archive?
我知道解密是一个广阔的世界,我是一个新手,但我有一个 WinZip 文件,我可以通过 WinZip 使用已知密码轻松地在 WinZip 中打开 UI。
但是,提供相同的密码,我无法在 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 ...
正常传递密码,不编码可能有效。
您首先需要确定 zip 文件使用的加密类型。 WinZip 本身可能有一个报告工具会告诉您。我没有,所以不知道。
如果您可以访问任何命令行 zip 实用程序,您可以很容易地找到。
首先,如果您有可用的 unzip
的 Infozip 实现,运行 它带有 -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
我知道解密是一个广阔的世界,我是一个新手,但我有一个 WinZip 文件,我可以通过 WinZip 使用已知密码轻松地在 WinZip 中打开 UI。
但是,提供相同的密码,我无法在 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 ...
正常传递密码,不编码可能有效。
您首先需要确定 zip 文件使用的加密类型。 WinZip 本身可能有一个报告工具会告诉您。我没有,所以不知道。
如果您可以访问任何命令行 zip 实用程序,您可以很容易地找到。
首先,如果您有可用的 unzip
的 Infozip 实现,运行 它带有 -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