在寻找使用的东西(扩展名,库等)之后,我想将PGP加密集成到我的Web应用程序中,因此我决定使用gnupg扩展名来使用php。现在,我在一个桌面文件夹中确实有一个PGP密钥,并且我尝试将其指纹用作addencryptkey
的字符串,我收到的错误是get_key failed
,我不明白为什么,我的PGP密钥有效。
关于SO有两个非常相似的问题:
php gnupg get_key failed error
基于这些,我对代码进行了一些更新,但均未成功,这是当前的样子:
putenv("GNUPGHOME=/home/user/Desktop/Keys/.gnupg/");
$pgp = new gnupg();
$pgp->addencryptkey("F0E2DF9C82ECE67935171F4939D8599A923820D9");
echo $pgp->geterror();
在putenv
中指定的文件夹中,我的公钥保存在.asc
文件中。除非它仅适用于存储在服务器上的密钥,否则我看不出问题的实质是什么?
答案 0 :(得分:0)
我 just 想分享我针对此问题的解决方案。鉴于这是有关该主题的最新问题之一,所以我认为最好在这里分享。
当时,我能够很好地加密消息(带有GNUPG PECL扩展名的PHP 7.4)。
为解决get_key_failed
错误,在设置/导入密钥后,我将整个.gnupg
目录复制到了Web服务器的根目录(在本例中为/ var / www / html)并更新了其目录权限,以便Web服务器可以访问它。
putenv("GNUPGHOME=/var/www/html/.gnupg");
我认为这可以解决问题,但是在尝试解密消息时遇到了一个新错误:
Uncaught Exception: decrypt failed
我唯一解决此问题的方法是,确保我的密钥对没有设置密码。有关PHP GNUPG文档的一些评论建议,无论如何adddecryptkey()
的第二个参数密码都将被忽略。但是,在我的情况下,解密仅适用于未设置密码短语的私钥。
这适用于我的本地实例(Ubuntu 18),并且在部署到运行Amazon Linux 2的EC2实例时有效。