【问题标题】:How to get gpg-agent to ask for passphrase when generating keys with GPGME?使用 GPGME 生成密钥时如何让 gpg-agent 询问密码?
【发布时间】:2026-02-09 02:15:01
【问题描述】:

我正在使用 pygpgme 生成密钥,效果很好,但我必须像这样向 gpgme 提供密码:

key_params = dedent("""
    <GnupgKeyParms format="internal">
      Key-Type: RSA
      Key-Length: 2048
      Name-Real: Jim Joe
      Passphrase: secret passphrase
      Expire-Date: 0
    </GnupgKeyParms>
""")
ctx = gpgme.Context()
result = ctx.genkey(key_params)

出于安全原因,我宁愿永远不知道密码,而是让 gpg-agent 为用户提供对话。

当我使用 pygpgme 解密或使用 gpg 命令行工具生成密钥时,密码短语对话框按预期弹出。

一种解决方案是使用带有子进程的 gpg 命令,但我想知道是否有更好的解决方案。

【问题讨论】:

    标签: python gpgme


    【解决方案1】:

    终于明白了。该请求需要“%ask-passphrase”控制语句。

    key_params = dedent("""
        <GnupgKeyParms format="internal">
          %%ask-passphrase
          Key-Type: RSA
          Key-Length: 2048
          Name-Real: Jim Joe
          Expire-Date: 0
        </GnupgKeyParms>
    """)
    

    【讨论】: