PHP gnupg enrypt 可以工作,但解密不



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

这里有一个简单的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

佩克利

包版本状态GNUPG 1.4.0 稳定

版PHP

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

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

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

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

对我来说,问题是PHP应用程序对密钥文件没有正确的权限。如果您使用"gpg"cli生成密钥(就像我所做的那样(,它将使文件归"root"所有。所以我只需要将它们更改为由 php 应用程序用户拥有。

我需要更新权限的文件夹是 {GNUPGHOME}/openpgp-revocs.d 和 {GNUPGHOME}/private-keys-v1.d

我猜你是/private-keys-v1.d 文件夹,因为您无法解密它。

最新更新