【问题标题】:Openpgp: Using python wrapper python-gnupg 'error - sign-encrypt 17' - Error only when signingOpenpgp:使用 python 包装器 python-gnupg 'error - sign-encrypt 17' - 仅在签名时出错
【发布时间】:2021-03-14 13:04:30
【问题描述】:

为了加密和签署消息,我想使用 python-gnupgp 模块。该模块是 gnupgp 的包装器。 加密工作正常,但如果我指定签名选项,我会收到错误。

gpg: WARNING: unsafe permissions on homedir '/home//Programming/GnuPGP/pgphome'\ngpg: Warning: not using 'xxx' as default key: No secret key\ngpg: 所有值都传递给'--default -key' 被忽略\n[GNUPG:] KEY_CONSIDERED xxx 0\n[GNUPG:] KEY_CONSIDERED AADFCABF9D6B54C7938195737DC2E276767872B0 0\ngpg: 没有默认密钥:没有密钥\n[GNUPG:] INV_SGNR 9\n[GNUPG:] FAILURE sign-加密 17\ngpg: [stdin]: 签名+加密失败:没有密钥\n"

但是我已经导入了一个密钥,并且想使用other_public.asc 进行加密并使用我自己的私钥进行签名。

我使用模块 python-openpgp。这是我的代码:

import gnupg
import os 


pgp_home = os.path.join(os.getcwd(), 'pgphome')
gpg = gnupg.GPG(gnupghome=pgp_home)

cwd = os.getcwd()

own_priv_key_path = os.path.join(cwd, 'assets/keys/own_secret.asc')
own_priv_key_data = open(own_priv_key_path).read()
own_priv_key = gpg.import_keys(own_priv_key_data, passphrase="hellomatthias1")

own_public_key_path = os.path.join(cwd, 'assets/keys/own_public.asc')
own_public_key_data = open(own_public_key_path).read()
own_public_key = gpg.import_keys(own_public_key_data)

other_public_key_path = os.path.join(cwd, 'assets/keys/other_pub.asc')
other_public_key_data = open(other_public_key_path).read()
other_public_key = gpg.import_keys(other_public_key_data)


gpg.trust_keys(own_public_key.fingerprints, trustlevel="TRUST_ULTIMATE")
gpg.trust_keys(own_priv_key.fingerprints, trustlevel="TRUST_ULTIMATE")
gpg.trust_keys(other_public_key.fingerprints, trustlevel="TRUST_ULTIMATE")

dummy_file_path = os.path.join(cwd, 'assets/dummyfiles/hello.txt')
output_file_path = os.path.join(cwd, 'assets/dummyfiles/encrypted_hello.txt')


res = gpg.encrypt("hello how are you", recipients=other_public_key.fingerprints[0], sign=own_priv_key.fingerprints[0], passphrase='passphraseofownprivatekey1')

我在这里做错了什么?

【问题讨论】:

    标签: pgp openpgp python-gnupgp


    【解决方案1】:

    我猜问题不在于代码,而在于 python-gnupg 包装器直接使用 gpg 可执行文件,因此受到 gpg 可执行文件要求的约束。

    阅读错误信息,您可以看到 gpg 可执行文件拒绝了您的密钥:

    gpg: WARNING: unsafe permissions on homedir '/home//Programming/GnuPGP/pgphome'
    gpg: Warning: not using 'xxx' as default key: No secret key
    gpg: all values passed to '--default-key' ignored
    

    Gpg 要求密钥必须存储在安全的主目录中,这意味着只有用户可以访问的主目录。看来您必须使用以下命令将主目录 /home//Programming/GnuPGP/pgphome 的权限减少到它自己的用户:

    $ chmod go-rwx /home//Programming/GnuPGP/pgphome
    

    完成后,gpg 不应再忽略您的密钥了。

    可能需要排除写访问权限,我不这么认为,但在这种情况下,使用 then :

    $ chmod u-wx,go-rwx /home//Programming/GnuPGP/pgphome
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-17
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 2018-08-17
      相关资源
      最近更新 更多