PHP gnupg加密可行,但解密不行。

5
我将使用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 返回的是什么? - Jens Erat
解密失败,没有其他信息。我通过使用shell_exec()中的普通解密命令来实现了一个解决方法。不知道为什么php基于加密方法的普通解密可以工作。 :-/ - Wolf-Tech
你尝试过使用没有密码的密钥吗?在gnupg > v2.0.0中,默认情况下无法在Web服务器中使用密码。密码请求会提示到控制台,因此无法正常工作。请查看手册中Mike的评论。 - finder2
2个回答

2
您尝试在gnupg_adddecryptkey()之后调用gnupg_geterror()了吗?我怀疑您的私钥实际上并没有被接受。我假设它需要在PHP用户的GPG密钥环中?在我进行的几次简短测试中,我一直在终端上提示输入密码,但这可能是因为我的gpg配置过于谨慎(我完全禁用了密码缓存)。另一个捕获错误的方法是将gnupg_seterrormode()设置为ERROR_EXCEPTION或类似模式,以查看实际发生了什么...

0

对我来说问题在于PHP应用程序没有正确的权限访问密钥文件。如果你使用'gpg'终端生成密钥(就像我一样),它会将文件所有权设置为'root'。所以我只需要将它们更改为php应用程序用户拥有。

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

我猜你遇到的问题可能是/private-keys-v1.d文件夹,因为你无法解密它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接