我使用以下方法加密字符串:
$gpg = new gnupg();
putenv("GNUPGHOME=/var/www/.gnupg");
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
$gpg->addencryptkey($fingerprint);
$encrypted = $gpg->encrypt($data);
echo "Encrypted text: \n<pre>$encrypted</pre>\n";
其输出正常,但我在将此输出解密回字符串时遇到问题。
为了在CLI中解密,我必须使用
gpg-agent --daemon --verbose gpg --homedir /var/www/.gnupg
(如果我不在gpg之前包含gpg-agent的内容,我会收到套接字连接错误)
然后输入我的密码和CTRL + D作为文件末尾,文本字符串被正确解密。
当我使用gnupg_decrypt在php中尝试相同的解密时,我只是解密失败了。有没有我可以做的事情来禁用gpg-agent,因为我已经尝试在conf文件中添加no-agent等但它似乎没有效果,但我认为这可能是问题。
所有文件都设置为与从php文件运行的进程的所有者匹配,并且权限看起来正确,因为除了与gpg-agent的交互之外,其他一切正常。
这个解密需要作为php函数静默发生,因为它构成了隔夜自动更新系统的一部分。
任何帮助都非常感激。