我有一个受密码保护的zip文件,名为important.zip
,它包含1个文件夹,该zip文件的密码为123,但是当我使用错误的密码运行此代码时,该文件夹仍会被提取,如何确保没有正确的密码就无法提取文件夹?
import zipfile
zFile=zipfile.ZipFile("important.zip")
try:
zFile.extractall(pwd="oranges")
except Exception as e:
print e
答案 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?
请注意,每个文件都有自己的密码,因此,如果使用其他密码进行加密,则某些文件可能无法提取。