pythongnupg如何在不必指定homedir或在目录中存储密钥的情况下对文件进行pgp加密

2024-04-28 22:00:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要编写一个自动化任务来使用pythongnupg lib对文件进行pgp加密。在

我将从securecloud获取加密密钥,出于安全考虑,我的首选是不将密钥存储在本地磁盘中。在

我知道你可以指定homedir,也可以导入key,但我想知道是否可以不指定homedir,以及我们是否可以避免不将密钥保存到文件中。在

我对任何可以完成pgp加密的python库开放。在


Tags: 文件keylib密钥磁盘pgphomedirpythongnupg
1条回答
网友
1楼 · 发布于 2024-04-28 22:00:47

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

如果您不通过使用任何库的任何标准方法指定homedir,那么GPG将默认为调用脚本的用户的homedir(默认情况下这将是$HOME/.gnupg)。此外,要加密到公钥,它必须在实际使用时在磁盘上可用。不过,如果你愿意的话,你以后可以直接把它处理掉。在

要在/tmp目录中创建一个临时homedir(不推荐,但在某些系统(如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绑定。在

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

^{pr2}$

既然你知道你得到的是哪把钥匙,我假设你也已经知道那是钥匙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中找到。在

相关问题 更多 >