如何 Python gnupg (GPG) 使用收件人的电子邮件地址而不是他们的指纹进行加密?

How to Python gnupg (GPG) encrypt with recipient's email address rather than their fingerprint?

如何 Python-gnupg (GnuPG / GPG / OpenPGP) 使用收件人的电子邮件地址而不是他们的指纹进行加密?

This example 显示(在我的 Ubuntu 20.04 / 这样的事情上失败了,但这是一个古老的例子;摘录:

encrypted_data = gpg.encrypt(unencrypted_string, 'testgpguser@mydomain.com')

更多最新(也许?)参考文献(例如 this and this) do not mention recipient email addresses, seemingly requiring numeric-only fingerprints for (presumably) public-key identication. Is it possible in today's environment (to identify a key solely by it's associated email_address/identity)? Possibly requiring a keyserver?

我测试过python-gnupg system versions.

查看您问题中的版本号,您似乎正在使用 pretty-bad-protocol 重写,自 2018 年以来就没有更新过。

如果你只是安装python-gnupg:

$ pip install python-gnupg

您获得版本 0.4.9,已发布 just a few days ago

Collecting python-gnupg
  Downloading http://.../python_gnupg-0.4.9-py2.py3-none-any.whl (18 kB)
Installing collected packages: python-gnupg
Successfully installed python-gnupg-0.4.9

使用此版本的 gnupg 模块,您的代码可以正常运行:

>>> import gnupg
>>> gpg = gnupg.G
gnupg.GPG(     gnupg.GenKey(
>>> gpg = gnupg.GPG()
>>> res = gpg.encrypt("this is a test", "bob@example.com")
>>> res.data
b'-----BEGIN PGP MESSAGE-----\n...\n-----END PGP MESSAGE-----\n'
>>>

当然更好使用指纹,因为您的钥匙串中可能有多个具有相同电子邮件地址的钥匙,并且您无法确定您使用的是哪一把会得到。使用指纹可确保您获得该特定密钥。