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

时间:2018-12-11 19:18:33

标签: python python-2.7 zipfile

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

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

1 个答案:

答案 0 :(得分:0)

zipfile模块会对此进行检查,并且可以在密码不匹配时返回“文件密码错误”。

但是它是基于每个文件执行的。由于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?

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