0

0

Python实现Excel文件加密保护教程

霞舞

霞舞

发布时间:2025-10-23 13:10:02

|

256人浏览过

|

来源于php中文网

原创

Python实现Excel文件加密保护教程

本教程旨在解决使用python为整个excel文件设置密码的难题,特别是当现有库如`openpyxl`或`xlsxwriter`仅支持工作表保护时。我们将介绍如何结合python生成excel文件与外部工具`msoffice-crypt`,实现对`.xlsx`文件的完整加密,确保文件在分发给客户端时,需输入密码才能打开,从而满足api交付等场景下的安全需求。

在许多业务场景中,通过API向客户端提供数据时,通常需要将数据导出为Excel文件,并对文件本身进行加密保护,以防止未经授权的访问。然而,Python中常用的Excel处理库,如openpyxl和xlsxwriter,主要提供的是工作表(sheet)级别的保护功能,而非整个Excel文件(workbook)的加密。这意味着用户仍然可以打开文件,只是无法编辑受保护的工作表。对于需要文件级密码保护的需求,例如客户端打开文件时弹窗要求输入密码,这些库并不能直接满足。

挑战:Python库的局限性

openpyxl和xlsxwriter等库在创建和修改Excel文件方面功能强大,但在文件加密方面存在固有局限:它们通常只支持设置工作表密码,限制用户对特定单元格或结构的修改,但不能阻止文件被打开。而某些解决方案,如依赖win32com库,虽然可以调用Windows系统的COM接口实现文件加密,但其跨平台兼容性差,在非Windows环境下(如Mac或Linux服务器)无法正常工作,不适合作为API服务的通用解决方案。

解决方案:结合msoffice-crypt实现文件级加密

为了实现对整个Excel文件的密码保护,推荐的方法是利用一个专门的外部工具——msoffice-crypt。这是一个由Herumi开发的开源命令行工具,专注于加密和解密Microsoft Office文件,包括.xlsx格式。其优点在于能够对文件进行真正的加密,使得文件在打开时需要密码,并且具有良好的跨平台特性。XlsxWriter的官方文档也推荐使用此类外部工具来解决文件加密问题。

步骤一:使用Python生成Excel文件

首先,我们需要使用pandas和xlsxwriter(或openpyxl)等库生成一个标准的Excel文件。这个文件在生成时不需要设置任何密码。

立即学习Python免费学习笔记(深入)”;

import pandas as pd

def create_excel_file(data, file_path="output.xlsx"):
    """
    使用pandas生成一个Excel文件。
    :param data: 待写入Excel的数据字典。
    :param file_path: 输出Excel文件的路径。
    """
    df = pd.DataFrame(data)
    # 使用xlsxwriter作为引擎,也可以使用openpyxl
    writer = pd.ExcelWriter(file_path, engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    writer.save()
    print(f"Excel文件 '{file_path}' 已创建。")

if __name__ == "__main__":
    sample_data = {
        'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [30, 24, 35],
        'City': ['New York', 'London', 'Paris']
    }
    create_excel_file(sample_data, "unencrypted_data.xlsx")

步骤二:安装msoffice-crypt工具

msoffice-crypt是一个命令行工具,需要先安装。你可以从其GitHub仓库下载预编译的二进制文件,或者通过包管理器安装(如果可用)。对于大多数Linux系统,可能需要手动编译或下载。

例如,在Linux或macOS上,你可以下载对应的二进制文件并将其添加到系统路径中。

改图鸭AI图片生成
改图鸭AI图片生成

改图鸭AI图片生成

下载
# 示例:下载并解压(请根据你的系统和最新版本调整URL)
# wget https://github.com/herumi/msoffice/releases/download/v1.0.0/msoffice-crypt-linux-amd64.tar.gz
# tar -xzf msoffice-crypt-linux-amd64.tar.gz
# sudo mv msoffice-crypt /usr/local/bin/

验证安装:

msoffice-crypt --version

步骤三:使用msoffice-crypt加密Excel文件

安装msoffice-crypt后,就可以通过命令行对其进行调用,对生成的Excel文件进行加密。

msoffice-crypt -e -p your_password unencrypted_data.xlsx encrypted_data.xlsx
  • -e: 表示执行加密操作。
  • -p your_password: 设置加密密码,请将your_password替换为实际的密码。
  • unencrypted_data.xlsx: 输入的未加密文件。
  • encrypted_data.xlsx: 输出的加密后的文件。

执行此命令后,encrypted_data.xlsx文件将需要your_password才能打开。

步骤四:在Python中集成加密过程

为了实现自动化,我们可以在Python脚本中通过subprocess模块调用msoffice-crypt命令,将文件生成和加密流程整合起来。

import pandas as pd
import subprocess
import os

def create_and_encrypt_excel(data, output_filename="report.xlsx", password="MySecurePassword"):
    """
    生成Excel文件并使用msoffice-crypt进行加密。
    :param data: 待写入Excel的数据字典。
    :param output_filename: 输出Excel文件的名称(加密后)。
    :param password: 用于加密Excel文件的密码。
    """
    temp_unencrypted_file = f"temp_{output_filename}"

    # 1. 生成未加密的Excel文件
    df = pd.DataFrame(data)
    writer = pd.ExcelWriter(temp_unencrypted_file, engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    writer.save()
    print(f"临时Excel文件 '{temp_unencrypted_file}' 已创建。")

    # 2. 调用msoffice-crypt进行加密
    try:
        # 确保msoffice-crypt在系统路径中,或者提供完整路径
        command = ["msoffice-crypt", "-e", "-p", password, temp_unencrypted_file, output_filename]
        result = subprocess.run(command, capture_output=True, text=True, check=True)
        print(f"Excel文件 '{output_filename}' 已成功加密。")
        print("msoffice-crypt stdout:", result.stdout)
        if result.stderr:
            print("msoffice-crypt stderr:", result.stderr)
    except subprocess.CalledProcessError as e:
        print(f"加密失败: {e}")
        print("msoffice-crypt stdout:", e.stdout)
        print("msoffice-crypt stderr:", e.stderr)
    except FileNotFoundError:
        print("错误: 'msoffice-crypt' 命令未找到。请确保它已安装并位于系统PATH中。")
    finally:
        # 清理临时未加密文件
        if os.path.exists(temp_unencrypted_file):
            os.remove(temp_unencrypted_file)
            print(f"临时文件 '{temp_unencrypted_file}' 已删除。")

if __name__ == "__main__":
    sample_data = {
        'Product': ['Laptop', 'Mouse', 'Keyboard'],
        'Quantity': [10, 50, 30],
        'Price': [1200, 25, 75]
    }
    create_and_encrypt_excel(sample_data, "sales_report.xlsx", "StrongP@ssw0rd!")

注意事项与最佳实践

  1. msoffice-crypt的可用性: 确保msoffice-crypt工具在运行Python脚本的环境中是可执行的,并且其路径已添加到系统的PATH环境变量中,或者在subprocess.run命令中提供其完整路径。
  2. 密码管理: 在API或生产环境中,不应将密码硬编码在代码中。应通过环境变量、配置文件或安全的密钥管理服务来获取密码。
  3. 临时文件处理: 加密过程会生成一个未加密的临时文件。在加密完成后,务必删除这个临时文件,以避免敏感数据泄露。上述示例代码已包含清理逻辑。
  4. 错误处理: 使用subprocess.run时,应捕获subprocess.CalledProcessError和FileNotFoundError等异常,以便在工具执行失败或未找到时提供有意义的反馈。
  5. 性能考虑: 对于非常大的Excel文件,加密过程可能会消耗一定的时间。在API响应中,需要考虑这一点,可能需要异步处理或提供进度反馈。
  6. 安全性: 虽然msoffice-crypt提供了文件级加密,但密码本身的安全性至关重要。使用强密码,并确保密码在传输和存储过程中是安全的。

总结

通过将Python的数据处理能力与msoffice-crypt的专业加密功能结合,我们能够有效地解决Python原生库在Excel文件级加密方面的局限性。这种两阶段方法——先生成未加密文件,再通过外部工具进行加密——提供了一个灵活且跨平台的解决方案,满足了在API交付等场景下对Excel文件进行安全分发的需求。遵循上述步骤和注意事项,开发者可以构建出健壮且安全的Excel文件导出功能。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

760

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

762

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

619

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1285

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

3

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号