>我正在尝试制作一个简单的工具来解密GPG消息,但是在解密消息时不断收到错误,我不知道问题来自哪里。
这是代码:
import gnupg
import os
message = '''-----BEGIN PGP MESSAGE-----
Version: GnuPG v2
jA0ECQMCVady3RUyJw3X0kcBF+zdkfZOMhISoYBRwR3uk3vNv+TEg+rJnp4/yYIS
pEoI2S82cDiCNBIVAYWB8WKPtH2R2YSussKhpSJ4mFgqyOA01uwroA==
=KvJQ
-----END PGP MESSAGE-----
'''
passphrase = 'topsecret'
gpg = gnupg.GPG(os.popen("which gpg").read().strip())
decrypted_data = str(gnupg.decrypt(message, passphrase=passphrase))
print(decrypted_data)
这是错误:
PermissionError: [Errno 13] Permission denied: ''
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 29, in <module>
gpg = gnupg.GPG(os.popen("which gpg").read().strip())
File "/Users/***/PycharmProjects/untitled8/venv/lib/python3.6/site-packages/gnupg.py", line 849, in __init__
raise OSError(msg)
OSError: Unable to run gpg () - it may not be available.
python-gnupg
软件包要求您具有gpg
可执行文件的工作安装。
从部署要求文档中:
除了足够新的Python版本,为了使用这个 模块,您需要访问兼容版本的 GnuPG 可执行。该系统已在Windows上使用GnuPG v1.4.9进行了测试 和 Ubuntu。在 Linux 平台上,这通常通过以下方式安装 发行版的包管理器(例如
apt-get
在 Debian/Ubuntu 上(。 Windows 二进制文件可在此处获得 - 使用其中一个gnupg-w32cli-1.4.x.exe
安装程序以获取最简单的部署选项。
你得到的错误很清楚:
OSError:无法运行 gpg (( - 它可能不可用。
它来自这部分:
os.popen("which gpg").read().strip()
尝试从终端/控制台运行which gpg
。如果未安装gpg
,which gpg
的计算结果将计算为空字符串''
,然后整行将计算为空''
字符串。它实际上与
gpg = gnupg.GPG('')
然后,这将引发相同的错误,即它找不到gpg
可执行文件。
因此,基本上,您需要先安装gpg
。
如果您已经安装了gpg
并且由于某种原因which gpg
找不到它,您还可以传递一个gpgbinary
参数:
gpg = gnupg.GPG(gpgbinary="/usr/local/bin/gpg")
我花了几个小时试图找到这个问题的解决方案,因为提出的不同解决方案不起作用。
我找到了两个解决方案:
首先,您需要在计算机上找到gpg文件,为此您有多种选择
- 你可以打开一个命令行并键入
gpg --version
,你会看到类似这样的内容(如果你没有看到,你需要从官方网站下载 GnuPG(:
gpg (GnuPG) 2.3.8
libgcrypt 1.10.1
Copyright (C) 2021 g10 Code GmbH
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: C:UsersUSERNAMEAppDataRoaminggnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
AEAD: EAX, OCB
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
Home
是我们正在寻找的文件夹。转到该路径,看看是否找到gpg
,如果是,那就是路径。- 如果你没有找到
gpg
文件,你可以C:UsersUSERNAMEAppDataLocalgnupgbin
中查找,这就是我找到它的地方。
找到路径后,您必须将该路径添加到系统环境变量中
根据您的系统,过程是不同的。您可以看到解释该过程的其他讨论。
完成此操作后,您的程序应该可以正常工作
如果没有,您可以尝试
gpg = gnupg.GPG(gpgbinary="C:\Users\USERNAME\AppData\Local\gnupg\bin\gpg")
将路径替换为找到的路径