我在磁盘上有一个非常大的文本文件。假设它是1 GB或更多。还假设此文件中的数据每120个字符都有一个\n
个字符。
我正在使用python-gnupg加密此文件。 由于文件太大,我无法一次将整个文件读入内存。
但是,我使用的gnupg.encrypt()
方法要求我一次发送所有数据 - 而不是块。那么如何在不耗尽所有系统内存的情况下加密文件呢?
以下是一些示例代码:
import gnupg
gpg = gnupg.GPG(gnupghome='/Users/syed.saqibali/.gnupg/')
for curr_line in open("VeryLargeFile.txt", "r").xreadlines():
encrypted_ascii_data = gpg.encrypt(curr_line, "recipient@gmail.com")
open("EncryptedOutputFile.dat", "a").write(encrypted_ascii_data)
此示例生成无效的输出文件,因为我不能简单地将加密的blob连接到一个文件中。
答案 0 :(得分:0)
行加密行会导致大量的OpenPGP文档,这不仅会使解密变得更加复杂,而且还会大大增加文件大小和计算工作量。
Python的GnuPG模块也知道一个方法encrypt_file
,它将流作为输入,并知道可选的output
参数直接将结果写入文件。
with open("VeryLargeFile.txt", "r") as infile:
gpg.encrypt_file(
infile, "recipient@example.org",
output="EncryptedOutputFile.dat")
这会产生具有恒定和低内存要求的流式传输行为。
答案 1 :(得分:0)
我在open命令中添加了“ b”(用于二进制),它对我的代码非常有用。由于某种原因,这种方式的加密速度比通过shell / bash命令加密的速度慢一半。