如何使用zipfile模块创建受密码保护的zipfile



我有一个名为important.zip的受密码保护的zip文件,它包含1个文件夹,zip文件的密码是123,但是当我使用错误的密码运行此代码时,文件夹仍然被提取,如果没有正确的密码,我如何才能确保无法提取文件夹?

import zipfile
zFile=zipfile.ZipFile("important.zip")
try:
zFile.extractall(pwd="oranges")
except Exception as e:
print e

zipfile模块也会检查这一点,当密码不匹配时,它会返回"文件的错误密码"。

但它是在每个文件的基础上执行此操作的。因为ZIP文件中的每个文件都可以有自己不同的密码,该密码是将文件添加到归档文件时给定的密码。

我认为您的zip文件没有密码保护,因为zip文件在提取未受密码保护的文件时接受密码。当由于文件未受密码保护而未使用密码时,它不会报告错误。

为了避免在提供密码时提取不受密码保护的zip文件,必须检查文件是否受密码保护:

import zipfile
def all_files_are_password_protected(zf):
return all(zinfo.flag_bits & 0x1 for zinfo in zf.infolist())
zFile=zipfile.ZipFile("important.zip")
try:
if all_files_are_password_protected(zFile):
zFile.extractall(pwd="oranges")
except Exception as e:
import traceback
traceback.print_exc()

基于:

zf = zipfile.ZipFile(archive_name)
for zinfo in zf.infolist():
is_encrypted = zinfo.flag_bits & 0x1 
if is_encrypted:
print '%s is encrypted!' % zinfo.filename

从如何检查zip文件是否使用python';s标准库zipfile?

请注意,每个文件都有自己的密码,因此如果使用不同的密码加密,某些文件可能无法提取。

最新更新