【问题标题】:decrypt file with PHP gnupg after encrypting using gpg4win使用 gpg4win 加密后使用 PHP gnupg 解密文件
【发布时间】:2013-07-22 13:42:08
【问题描述】:

我完全被一个 pgp 问题所困扰,但我想这更像是一个逻辑问题而不是技术问题 - 无论如何,我不明白。

目标是使用 gpg4win (www.gpg4win.de/index.html) 加密文件并使用 PHP (gnupg) 解密。

我做的第一件事是,我使用 gpg4win 创建了一个证书,设置了密码并加密了一个简单的文本文件 (ASCII)。然后我上传文件并尝试使用以下代码对其进行解密:

$content = file_get_contents("some-test-data.asc");
$gpg = new gnupg();
$gpg -> adddecryptkey("MYFINGERPRINT","my.pass.phrase");
$plain = $gpg -> decrypt($content);
var_dump($plain);

结果是: 布尔(假)

我做错了什么?我尝试了不同的代码和建议,但总是以 bool(false) 结束。

这些方法不兼容吗,我必须使用不同的应用程序吗?

感谢我能得到的每一个小小的帮助。非常感谢!

附: PHP 是用 gnupg 编译的 GPGme 版本 1.4.2 扩展版本 1.3.3-dev

【问题讨论】:

  • 试试echo $gpg -> geterror();看看问题
  • 您是否将您的私钥复制到服务器?提供密码是不够的,这只会解密仍然需要的私钥(在正确的密钥环中)。
  • 我必须将私钥复制到哪个位置以及如何告诉脚本使用哪个密钥?
  • @DevZer0:错误是:“get_key failed”

标签: php gpgpu openpgp


【解决方案1】:

问题解决了。如果有人遇到同样的问题,那是由于 PHP 文档的滞后:

字符串 gnupg_decrypt(资源 $identifier,字符串 $text)

如果在评论区发现以下评论: 从 gnupg 版本 2 开始,无法再传递纯密码。该参数被简单地忽略。相反,如果 php 在 cli 模式下运行,则会启动 pinentry 应用程序。在 cgi 或 apache 模式下,打开密钥会失败。 最简单的解决方案是使用没有密码的密钥。

所以我创建了一个没有密码的新密钥,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-10
    • 2012-07-02
    • 2016-02-14
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多