当前位置: 首页 > 知识库问答 >
问题:

PythonGnuPG生成密钥,加密和解密消息

景宏盛
2023-03-14

使用Python-GnuPG我想

    null
import string
import random
import gnupg

random_string_length = 20
random_gpg_key_passphrase = "".join(
        random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(random_string_length))

gpg = gnupg.GPG(homedir="gpg")
cs_gpg_key_input_dict = {
    "key_type":  "RSA",
    "key_length": 4096,
    "passphrase": random_gpg_key_passphrase
}
python_gnupg_key_generation_input_data = gpg.gen_key_input(**cs_gpg_key_input_dict)
gpg_key_pair = gpg.gen_key(python_gnupg_key_generation_input_data)

encrypted_data = gpg.encrypt("message", gpg_key_pair.fingerprint,
                                             passphrase=random_gpg_key_passphrase, always_trust=True)

msg = str(encrypted_data)
decrypted_data = gpg.decrypt(msg, passphrase=random_gpg_key_passphrase, always_trust=True)

不幸的是,加密返回错误:

raise ValueError("Unknown status message: %r" % key)
ValueError: Unknown status message: 'ENCRYPTION_COMPLIANCE_MODE'

但它仍然生成加密ASCII铠甲消息,如果解密结果为crypt对象,则falsebool值为OK属性,并包含以下stderr属性:

[GNUPG:] ENC_TO <XXX> 1 0
[GNUPG:] KEY_CONSIDERED <YYY> 0
[GNUPG:] PINENTRY_LAUNCHED 7570 gnome3:curses 1.1.0 - - :0
[GNUPG:] KEY_CONSIDERED <YYY> 0
gpg: encrypted with 4096-bit RSA key, ID <XXX>, created 2019-10-01
      "ZZZ"
gpg: public key decryption failed: Inappropriate ioctl for device
[GNUPG:] ERROR pkdecrypt_failed <QQQ>
[GNUPG:] BEGIN_DECRYPTION
[GNUPG:] DECRYPTION_FAILED
gpg: decryption failed: No secret key
[GNUPG:] END_DECRYPTION

不确定错误发生的确切位置以及如何处理

共有1个答案

杭英杰
2023-03-14

经过几个小时的查找,我发现需要将--pinentry-mode loopback选项添加到gpg init中,如下所示:

cs_gpg_options = ['--pinentry-mode loopback']
gpg = gnupg.GPG(homedir="gpg", options=cs_gpg_options)

之后,加密/解密过程应该会成功(注意,stderr仍然生成,因为它是GPG工具的全部输出)

 类似资料:
  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id

  • 问题内容: 我正在使用Java应用程序,该应用程序要求我使用从不同字符串生成的两个密钥进行加密和解密。一个字符串来自用户,另一个是主密钥。我上网查看了有关它的一些参考资料。我真的很想知道如何实现此目标。我将展示我现在拥有的。 因此,从代码中可以看到,我使用了其他stackoverflow帖子中的一些代码,并对其进行了一些修改。我只是不知道如何从2个字符串生成2个密钥,以及从哪里可以获取用于解密的S

  • 我正在开发一个Java应用程序,它要求我使用从不同字符串生成的两个密钥进行加密和解密。一个字符串来自用户,另一个是主密钥。我在网上查了一下,找到了一些关于它的参考资料。我真的很想得到一些帮助,了解如何实现这一点。我将展示我现在所拥有的。 正如您从代码中看到的,我使用了其他stackoverflow帖子中的一些代码,并对其进行了一些修改。我只是不知道如何从2个字符串生成2个密钥,以及从哪里可以获得用

  • 这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。

  • 问题内容: 我正在用Python编写程序,以通过安装程序分发给Windows用户。 该程序需要能够每天下载使用用户公钥加密的文件,然后再解密。 因此,我需要找到一个Python库,该库将允许我生成公共和私有PGP密钥,并解密使用该公共密钥加密的文件。 pyCrypto是否会做这件事(文档模糊)?还有其他纯Python库吗?使用任何语言的独立命令行工具如何? 到目前为止,我所看到的只是GNUPG,但

  • 我对使用bouncy-gpg和PCKS12密钥的加密和描述的实现有麻烦。现在我有了PCKS12密钥(扩展名:.p12)。从这个密钥,我能够获得公钥和私钥。否则,bouncy-gpg需要使用gpg密钥。如何在bouncy-gpg中使用p12文件?如果有任何建议,我将不胜感激。多谢了。