【问题标题】:Gnupg gives "get_key failed" despite using a valid key尽管使用了有效的密钥,Gnupg 仍给出“get_key failed”
【发布时间】:2019-09-21 20:40:19
【问题描述】:

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

关于 SO 有两个非常相似的问题:

php gnupg get_key failed error,

gnupg get_key failed in php,

基于这些,我已经稍微更新了我的代码,但没有成功,这是它目前的样子:

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

  $pgp = new gnupg();

  $pgp->addencryptkey("F0E2DF9C82ECE67935171F4939D8599A923820D9");
  echo $pgp->geterror();

在putenv 指定的文件夹中,我的公钥保存在.asc 文件中。我看不出真正的问题是什么,除非它只适用于存储在服务器上的密钥?

【问题讨论】:

    标签: php gnupg pgp


    【解决方案1】:

    我只是想分享我对这个问题的修复。鉴于这是关于此主题的最新问题之一,我认为最好在这里分享。

    当时我能够很好地加密消息(带有 GNUPG PECL 扩展的 PHP 7.4)。

    为了解决get_key_failed 错误,在设置/导入我的密钥后,我将整个.gnupg 目录复制到我的网络服务器的根目录(在我的例子中是/var/www/html)并更新了它的权限,以便它网络服务器可以访问。

    putenv("GNUPGHOME=/var/www/html/.gnupg");
    

    我以为这样可以解决问题,但是在尝试解密消息时遇到了一个新错误:

    Uncaught Exception: decrypt failed
    

    解决此问题的唯一方法是确保我的密钥对没有有密码。 PHP GNUPG 文档上的一些 cmets 建议忽略作为 adddecryptkey() 的第二个参数的密码短语。但是,在我的情况下,解密只能使用没有设置密码的私钥。

    这适用于我的本地实例 (Ubuntu 18),并且在部署到运行 Amazon Linux 2 的 EC2 实例时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2021-11-03
      • 2018-07-21
      • 1970-01-01
      • 2011-12-19
      • 2015-09-07
      • 2014-05-21
      相关资源
      最近更新 更多