gpt4 book ai didi

python gnupg 如何 pgp 加密文件而无需指定主目录或将 key 存储在目录中

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:09 25 4
gpt4 key购买 nike

我需要编写一个自动化任务来使用 python gnupg lib 来 pgp 加密文件。

我将从安全云中获取加密 key ,出于安全原因,我不希望将 key 存储在本地磁盘中。

我知道您可以指定主目录,也可以导入 key ,但我想知道是否可以不指定主目录,以及我们是否可以避免不将 key 保存到文件中。

我对任何可以完成此 pgp 加密的 python 库持开放态度。

最佳答案

要加密数据,您只需要公钥,因此将其存储在自动化系统中不存在固有的安全问题。由于您对所关注的安全问题类型不太具体,我将不得不假设您的意思是您不想永久存储标识 key 或 key 所有者的信息加密实际上是。

如果您没有通过使用任何库的任何标准方法指定主目录,则 GPG 将默认为调用脚本的用户的主目录(默认情况下为 $HOME/.gnupg)。此外,要加密为公钥,它必须在实际使用时在磁盘上可用。不过,如果需要,您可以在之后直接删除它。

要在 /tmp 目录中创建一个临时主目录(不推荐,但在某些系统(如 Tails Linux)上可能有用),请执行以下操作:

import os
import os.path

newhome = "/tmp/.gnupg"

if os.path.exists(newhome) is True:
print("The {0} directory already exists.".format(newhome))
else:
print("Creating the {0} directory.".format(newhome))
os.mkdir(newhome)
os.chmod(newhome, 0o700)

此示例的其余部分使用 GPGME Python 绑定(bind)。

假设您已将公钥下载为本地 ASCII 装甲文件,那么这会将其导入到新的临时 homedir:

import gpg

keyfile = "/tmp/key.asc"
c = gpg.Context(armor=True, home_dir=newhome)
with open(keyfile, "rb") as f:
keydata = f.read()

c.op_import(keydata)
result = c.op_import_result()

既然你知道你得到的是哪个 key ,我假设你也已经知道它是 key ID 或指纹,所以我们直接继续:

key_id = "0x12345678DEADBEEF"
filename = "/path/to/secret_plans.txt"

rkey = list(gpg.Context().keylist(pattern=key_id, secret=False))
with open(filename, "rb") as f:
text = f.read()

ciphertext, result, sign_result = c.encrypt(text, recipients=rkey, sign=False,
always_trust=True)
with open("{0}.asc".format(filename), "wb") as fa:
fa.write(ciphertext)

然后,一旦完成,您就可以按照自己喜欢的方式删除 newhome

GPGME Python bindings HOWTO(组织模式源文件)和 HTML version is here 中提供了有关此模块如何(以及为什么)执行其操作的更多详细信息。

关于python gnupg 如何 pgp 加密文件而无需指定主目录或将 key 存储在目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49420262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com