RELATEED CONSULTING
相关咨询
欢迎选择下列在线客服咨询
微信客服
微信客服二维码
热线电话:13863516421
7x24小时,全年无休
我们服务器的承诺:
关闭右侧工具栏

境外国外服务器专题

如何确保提供的密码是正确的?

  • 来源:本站
  • 编辑: 超级管理员
  • 时间:2025-05-08 09:24:35
  • 阅读12次


要确保提供的密码是正确的,可通过以下几种方式对之前批量解压密码保护 ZIP 文件的代码进行改进:

1. 多次尝试输入密码

可以给用户多次输入密码的机会,直到输入正确或者达到最大尝试次数。


python

import os

import zipfile

import pathlib



def batch_unzip_password_protected_files(zip_dir, extract_dir, max_attempts=3):

    zip_dir = pathlib.Path(zip_dir)

    extract_dir = pathlib.Path(extract_dir)

    extract_dir.mkdir(parents=True, exist_ok=True)


    for zip_file_path in zip_dir.rglob('*.zip'):

        attempts = 0

        while attempts < max_attempts:

            password = input(f"请输入 {zip_file_path} 的解压密码:")

            try:

                with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:

                    zip_ref.setpassword(password.encode())

                    file_extract_dir = extract_dir / zip_file_path.stem

                    file_extract_dir.mkdir(parents=True, exist_ok=True)

                    zip_ref.extractall(file_extract_dir)

                print(f"成功解压 {zip_file_path} 到 {file_extract_dir}")

                break

            except RuntimeError as e:

                if 'Bad password for file' in str(e):

                    attempts += 1

                    if attempts < max_attempts:

                        print(f"密码错误,你还有 {max_attempts - attempts} 次尝试机会。")

                    else:

                        print(f"已达到最大尝试次数,跳过 {zip_file_path} 的解压。")

                else:

                    print(f"发生未知错误:{e}")

            except FileNotFoundError:

                print(f"错误:未找到 {zip_file_path} 文件。")

            except zipfile.BadZipFile:

                print(f"错误:{zip_file_path} 不是有效的 ZIP 文件。")



# 示例用法

zip_directory = 'your_zip_files_directory'

extract_directory = 'extracted_files'

batch_unzip_password_protected_files(zip_directory, extract_directory)





代码解释

在每次解压文件时,通过 while 循环让用户输入密码,若密码错误则提示剩余尝试次数。

当达到最大尝试次数时,跳过该文件的解压。

2. 提供密码列表进行尝试

如果你有一个可能的密码列表,可以依次尝试这些密码。


python

import os

import zipfile

import pathlib



def batch_unzip_password_protected_files(zip_dir, extract_dir, password_list):

    zip_dir = pathlib.Path(zip_dir)

    extract_dir = pathlib.Path(extract_dir)

    extract_dir.mkdir(parents=True, exist_ok=True)


    for zip_file_path in zip_dir.rglob('*.zip'):

        for password in password_list:

            try:

                with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:

                    zip_ref.setpassword(password.encode())

                    file_extract_dir = extract_dir / zip_file_path.stem

                    file_extract_dir.mkdir(parents=True, exist_ok=True)

                    zip_ref.extractall(file_extract_dir)

                print(f"成功解压 {zip_file_path} 到 {file_extract_dir},使用密码:{password}")

                break

            except RuntimeError as e:

                if 'Bad password for file' in str(e):

                    continue

                else:

                    print(f"发生未知错误:{e}")

            except FileNotFoundError:

                print(f"错误:未找到 {zip_file_path} 文件。")

            except zipfile.BadZipFile:

                print(f"错误:{zip_file_path} 不是有效的 ZIP 文件。")

        else:

            print(f"未找到 {zip_file_path} 的正确密码,跳过解压。")



# 示例用法

zip_directory = 'your_zip_files_directory'

extract_directory = 'extracted_files'

password_list = ['password1', 'password2', 'password3']

batch_unzip_password_protected_files(zip_directory, extract_directory, password_list)

代码解释

针对每个 ZIP 文件,依次尝试 password_list 中的密码。

若某个密码成功解压文件,则跳出循环;若所有密码都尝试失败,则跳过该文件的解压。

3. 结合文件元数据或其他信息辅助判断

有些 ZIP 文件可能会在文件名、注释等元数据中包含与密码相关的线索。你可以提取这些信息来辅助确定密码。


python

import os

import zipfile

import pathlib



def batch_unzip_password_protected_files(zip_dir, extract_dir):

    zip_dir = pathlib.Path(zip_dir)

    extract_dir = pathlib.Path(extract_dir)

    extract_dir.mkdir(parents=True, exist_ok=True)


    for zip_file_path in zip_dir.rglob('*.zip'):

        # 假设文件名包含密码线索,例如文件名包含 "pwd_123"

        possible_password = None

        file_name = zip_file_path.name

        if "pwd_" in file_name:

            possible_password = file_name.split("pwd_")[1].split("_")[0]


        if possible_password:

            try:

                with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:

                    zip_ref.setpassword(possible_password.encode())

                    file_extract_dir = extract_dir / zip_file_path.stem

                    file_extract_dir.mkdir(parents=True, exist_ok=True)

                    zip_ref.extractall(file_extract_dir)

                print(f"成功解压 {zip_file_path} 到 {file_extract_dir},使用可能的密码:{possible_password}")

                continue

            except RuntimeError as e:

                if 'Bad password for file' in str(e):

                    pass

                else:

                    print(f"发生未知错误:{e}")


        password = input(f"请输入 {zip_file_path} 的解压密码:")

        try:

            with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:

                zip_ref.setpassword(password.encode())

                file_extract_dir = extract_dir / zip_file_path.stem

                file_extract_dir.mkdir(parents=True, exist_ok=True)

                zip_ref.extractall(file_extract_dir)

            print(f"成功解压 {zip_file_path} 到 {file_extract_dir}")

        except RuntimeError as e:

            if 'Bad password for file' in str(e):

                print(f"密码错误,跳过 {zip_file_path} 的解压。")

            else:

                print(f"发生未知错误:{e}")

        except FileNotFoundError:

            print(f"错误:未找到 {zip_file_path} 文件。")

        except zipfile.BadZipFile:

            print(f"错误:{zip_file_path} 不是有效的 ZIP 文件。")


我们提供7X24小时售后服务,了解更多机房产品和服务,敬请联系
购买咨询 售后服务