【问题标题】:PHP gnupg enrypt works but decrypt notPHP gnupg enrypt 可以工作,但不能解密
【发布时间】:2017-11-14 15:47:39
【问题描述】:

我即将使用 gnupg 来加密和解密文件。奇怪的是,加密工作正常,但解密总是返回 false。

这里有一个简单的php脚本加密和解密内容:

$content = 'test text';
putenv("GNUPGHOME=/PATH_TO_GPG_PATH");
$gpg = new gnupg();
$gpg->addencryptkey("FINGERPRINT");
$enc = $gpg->encrypt($content);

var_dump($enc);

$gpgD = new gnupg();
$gpgD->adddecryptkey("FINGERPRINT","PASSPHRASE");
$plain = $gpgD->decrypt($enc);
var_dump($plain);

版本

Debian 软件包

gpgv 1.4.18-7

libgpgme11:amd64 1.5.1-6

pecl

包版本状态 gnupg 1.4.0 稳定版

PHP版本: PHP 7.1.11-1+0~20171027135825.10+jessie~1.gbp2e638d

有人遇到过这个问题吗?我没主意了。 提前谢谢你。

【问题讨论】:

  • gnupg_geterror 返回什么?
  • 解密失败,仅此而已。我通过 shell_exec() 使用普通的解密命令做了一个解决方法。想知道为什么普通解密适用于基于 php 的加密方法。 :-/
  • 你试过没有密码的钥匙吗?在 gnupg > v2.0.0 中,默认情况下不可能在 Web 服务器中使用密码。密码请求被提示到控制台,因此它不起作用。看看手册中Mike的评论

标签: php encryption gnupg gpgme


【解决方案1】:

您是否尝试过在gnupg_adddecryptkey() 之后调用gnupg_geterror()?我怀疑您的私钥实际上没有被接受。我认为它需要在 PHP 用户的 GPG 密钥环中?同样在我运行的几个简短测试中,我一直在终端上收到密码短语的提示,但这可能是因为我偏执的 gpg 配置(我完全禁用了密码短语缓存)。

另一种捕获错误的方法是将gnupg_seterrormode() 设置为ERROR_EXCEPTION 或类似的,以查看实际发生的情况...

【讨论】:

    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 2014-05-11
    • 2018-11-28
    • 1970-01-01
    • 2013-01-29
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多