在Python中使用gnupg解密PGP

在Python中使用gnupg解密PGP,python,pgp,Python,Pgp,我正在尝试使用以下模块解密PGP文件: 以下是我的代码片段: #!/usr/bin/python import gnupg gpg = gnupg.GPG(gnupghome='C:\\Users\\GSquire\\Desktop\\GnuPG', gpgbinary='C:\\Users\\GSquire\\Desktop\\GnuPG\\pub\\gpg.exe',

我正在尝试使用以下模块解密PGP文件:

以下是我的代码片段:

#!/usr/bin/python

import gnupg

gpg = gnupg.GPG(gnupghome='C:\\Users\\GSquire\\Desktop\\GnuPG',
                                gpgbinary='C:\\Users\\GSquire\\Desktop\\GnuPG\\pub\\gpg.exe',
                                keyring='C:\\Users\\GSquire\\Desktop\\GnuPG\\secring.skr')

with open('.\\tranx08022012.txt.pgp', 'rb') as f:
    status = gpg.decrypt_file(f, passphrase='passphrase', output='out.txt')
我使用的是模块的最新版本和Python 2.6.6。我想我可以使用secure ring文件对其进行解密,因为该文件显然需要解密。当我运行脚本时,它会输出以下内容:

ok: False
status:
stderr:
gpg: expected public key but found secret key - must stop

安全密钥是解密文件的东西,这不是真的吗?谢谢你的帮助

您得到的错误是因为您在
keyring
参数中传递secret keyring的文件名。该参数仅适用于公钥环。不幸的是,似乎没有其他参数来指定密钥环文件


默认情况下,GnuPG将在指定的
gnupghome
文件夹中的
secring.gpg
中查找密钥,因此您可能可以重命名密钥文件并使其正常工作。

如果该文件是用密钥加密的,则不会;GPG加密是不对称的,如果使用一个密钥加密,则只能使用另一个密钥解密。可以是公钥,也可以是私钥。实际上,我已经成功地用公钥加密了,我想我只是在重复检查。我的理解(可能是错误的,因为我根本不是加密专家)是,通常认为用公钥解密不太好。不过,我不知道这是否总是正确的。通常(至少使用RSA加密)您使用public加密,使用private解密(尽管您使用private签名并使用public验证签名)Mmm。。。我可能需要自己问这个问题…我正在尝试使用私钥。我应该指出这一点。我没想到这么做会让人头疼!也许我弄错了,因为我对这个也不熟悉,但这就是我对它的理解。一对公钥和私钥背后的想法是共享公钥。拥有您的公钥的每个人都会加密文件。只有私钥的所有者才能成功解密文件。签名是由私钥完成的,因为只有一个人应该对文件进行签名,其他人应该使用公钥验证签名。我不知道为什么不建议使用一对钥匙。签名和验证的唯一问题是你必须首先信任发送者。我试着复制秘密环和公开环。它没有抱怨找不到密钥,但现在说密码算法无效。它使用1024位RSA密钥和IDEA算法进行加密。我觉得我运气不好!由于专利问题,GnuPG默认不支持IDEA。请参阅以了解详细信息(如果专利不适用于您,请参阅解决方案)。好吧,我回去工作后必须尝试一下。谢谢你的引导。我很高兴我只用它来解密,就像页面上说的那样。