【问题标题】:Encrypt file using GPG with exec()使用 GPG 和 exec() 加密文件
【发布时间】:2020-02-17 21:45:03
【问题描述】:

我正在尝试通过 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;

我在查看“输出”文件夹的同时运行 PHP 脚本,创建的文本文件没有任何问题, 但永远不会创建 asc 文件。

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

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

我尝试使用类方法 ($gpg = new gnupg();),但无法安装所有 PECL 模块/扩展。

任何帮助将不胜感激。

【问题讨论】:

标签: php gnupg


【解决方案1】:

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

我做了一些“愚蠢”的事情并发送了这个命令 ($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”)实际上“解开了谜团”,我想相信它是我所做的一切的结合。

以防万一其他人有这个问题,我发现这些文章真的很有帮助。

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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多