如何使用 Python 将文件压缩为受密码保护的存档

Posted

技术标签:

【中文标题】如何使用 Python 将文件压缩为受密码保护的存档【英文标题】:How to compress files as password protected archive using Python 【发布时间】:2017-02-23 20:49:39 【问题描述】:

有没有办法将gzipzipfile 压缩为受密码保护的存档? 这是一个示例代码,说明如何在没有密码保护的情况下归档文件:

import gzip, shutil

filepath = r'c:\my.log'

with gzip.GzipFile(filepath + ".gz", "w") as gz:
    with open(filepath) as with_open_file:
        shutil.copyfileobj(with_open_file, gz)

import zipfile

zf = zipfile.ZipFile(filepath + '.zip', 'w')
zf.write(filepath)
zf.close()

【问题讨论】:

那么您要求的是其他人阅读这些功能的手册? The gzip format does not support password protection. 【参考方案1】:

Python 支持extracting password protected zips:

zipfile.ZipFile('myarchive.zip').extractall(pwd='P4$$W0rd')

遗憾的是,它不支持创建它们。您可以调用 7zip 之类的外部工具,也可以使用this zlib wrapper 之类的第三方库。

【讨论】:

虽然pyminizip 可以为创建受密码保护的档案的人提供一个简单的解决方案,但安装起来非常困难。如果您对如何在 Windows for Python 2.7 上安装它有任何建议,请告诉我。 在 Windows 上,我只需安装 7zip 并从 Python 调用它。【参考方案2】:

使用gpg for encryption。这将是归档和压缩数据的单独包装。

【讨论】:

您是否愿意发布一个示例,说明如何加密源数据(文件或变量),将其存档到zipgzip 文件,然后解压缩并解密生成原始未压缩和解密的源数据。 首先,你把它弄反了。您必须在之前加密,而不是之后存档和压缩。加密数据显示为随机且不可压缩。其次,查看示例链接。 它对我不起作用。我已经使用pip install python-gnupg 安装了它。使用import gnupg 导入的模块。然后我尝试使用gpg = gnupg.GPG('C:/temp') 启动实例,这会给出我在下面发布的错误消息 Traceback (most recent call last): File "C:\temp\test.py", line 19, in <module> gpg = gnupg.GPG('C:/temp') File "C:\Python27\lib\site-packages\gnupg\gnupg.py", line 125, in __init__ ignore_homedir_permissions=ignore_homedir_permissions, File "C:\Python27\lib\site-packages\gnupg\_meta.py", line 181, in __init__ self.homedir = os.path.expanduser(home) if home else _util._conf File "C:\Python27\lib\site-packages\gnupg\_util.py", line 765, in __set__ getattr(obj, self.fset.__name__)(value) File "C:\Python27\lib\site-packages\gnupg\_meta.py", line 438, in _homedir_setter raise RuntimeError(str(ae)) RuntimeError: Homedir ''C:\temp\gnupghome\.config\python-gnupg'' needs read/write permissions

以上是关于如何使用 Python 将文件压缩为受密码保护的存档的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能将类定义为受保护的?

如何在 Mockery 中为受保护的属性存根公共设置方法

将基本 UserControl 的修饰符设置为受保护时,Visual Studio 崩溃

如何在 Python3 中解压缩使用 PKZIP 以外的算法加密的文件?

Python-加密-压缩-文件

受保护的静态成员变量