使用带有 exec() 的 GPG 加密文件

Encrypt file using GPG with exec()

我正在尝试通过 exec() 使用 GPG 加密文件。我要加密的文件是在 运行 执行此命令之前创建的。

$fesha = date("mdY");
$file_name = "FILE_$fesha.txt";
$myfile = fopen($file_name, "w");
//MySQL query
fwrite($myfile, $txt);
fclose($myfile);

$password = "*password*";
$commando = "gpg --encrypt --passphrase=\"$password\" --armor --batch --yes --trust-model always -r **email@public.key** \"$file_name\"";
echo  shell_exec($commando);
echo $commando;

我在观看 "output" 文件夹时 运行 PHP 脚本,创建的文本文件没有任何问题, 但从未创建 asc 文件。

如果我手动 运行 PHP 文件的输出(实际的 GPG 命令),则创建加密文件时没有任何问题或错误消息。

我已经尝试解决这个问题几个小时了。

我尝试使用 class 方法 ($gpg = new gnupg();) 但我无法安装所有 PECL modules/extensions.

任何帮助将不胜感激。

经过数小时的研究,使用更多命令参数反复试验,尝试在服务器端使用权限,尝试将 www-data 用户添加到管理领域,修改 /home/www-data/ 上的权限.gnupg 和 /home/mainuser/.gnupg 文件夹...

我做了一些事情 "dumb" 并发送这个命令 ($commando = "gpg --gen-key";) 看看如果我可以通过 PHP 脚本生成密钥,因为此时我有点弄清楚它与权限有关,而且我无法以 www-data 身份登录到终端。

显然我没有得到交互式响应,但我猜它只是创建了一个空键或其他东西,因为在我再次尝试原始命令后:

$commando = "gpg --encrypt --passphrase=\"$password\" --armor --batch --yes --trust-model always -r email@public.key \"$file_name\"";

果然有效! 服务器创建了文本文件和加密文件。

所以,我不想相信那个愚蠢的东西 ("gpg --gen-key") 实际上 "solved the mystery",我想相信这是我所做的一切的结合。

为了防止其他人遇到此问题,我发现这些文章非常有用。

Using GPG (GnuPG with PHP on Server.

gpg: WARNING: unsafe ownership on homedir /home/user/.gnupg

What are the correct permissions for the .gnupg enclosing folder?