Php Gnupg给出了;获取“U键失败”;尽管使用了有效的密钥

Php Gnupg给出了;获取“U键失败”;尽管使用了有效的密钥,php,gnupg,pgp,Php,Gnupg,Pgp,我想将PGP加密集成到我的web应用程序中,在寻找要使用的内容(扩展、库等)之后,我决定使用用于php的gnupg扩展。现在,我的一个桌面文件夹中确实有一个PGP密钥,我尝试使用它的指纹作为addencryptkey的字符串,我收到的错误是get_key failed,我不明白为什么,我的PGP密钥是有效的 因此,有两个非常相似的问题: , , 基于这些,我对代码进行了一些更新,但没有成功,下面是它当前的样子: putenv("GNUPGHOME=/home/user/Desktop/Key

我想将PGP加密集成到我的web应用程序中,在寻找要使用的内容(扩展、库等)之后,我决定使用用于php的gnupg扩展。现在,我的一个桌面文件夹中确实有一个PGP密钥,我尝试使用它的指纹作为
addencryptkey
的字符串,我收到的错误是
get_key failed
,我不明白为什么,我的PGP密钥是有效的

因此,有两个非常相似的问题:

,

,

基于这些,我对代码进行了一些更新,但没有成功,下面是它当前的样子:

  putenv("GNUPGHOME=/home/user/Desktop/Keys/.gnupg/");

  $pgp = new gnupg();

  $pgp->addencryptkey("F0E2DF9C82ECE67935171F4939D8599A923820D9");
  echo $pgp->geterror();
putenv
中指定的文件夹中,我将公钥保存在
.asc
文件中。我看不出真正的问题是什么,除非它只适用于存储在服务器上的密钥?

我只是想分享我对这个问题的修复。鉴于这是最近关于这个话题的一个问题,我认为最好在这里与大家分享

当时我能够很好地加密消息(带有gnupgpecl扩展的php7.4)

为了解决
get\u key\u failed
错误,在设置/导入我的密钥后,我将整个
.gnupg
目录复制到我的Web服务器的根目录(/var/www/html,在我的情况下)并更新其权限,以便Web服务器可以访问它

putenv("GNUPGHOME=/var/www/html/.gnupg");
我认为这可以解决问题,但是在尝试解密消息时遇到了一个新错误:

Uncaught Exception: decrypt failed
解决这个问题的唯一方法是确保我的密钥对没有密码。PHP GNUPG文档中的一些评论表明,不管怎样,
adddecryptkey()
上的第二个参数passphrase都会被忽略。然而,在我的例子中,解密只对没有密码短语集的私钥起作用

这在我的本地实例(Ubuntu18)和部署到运行AmazonLinux2的EC2实例上都有效