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

How to create a password protected zipfile using the zipfile module

我有一个名为 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 模块会对此进行检查,并会在密码不匹配时 returns 和 'Bad password for file' 进行检查。

但它是在每个文件的基础上执行此操作的。由于 ZIP 文件中的每个文件都可以有自己不同的密码,这是将文件添加到存档时给出的密码。

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

为避免在提供密码时提取不受密码保护的 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

来自How to check if a zip file is encrypted using python's standard library zipfile?

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