【问题标题】:PGP encryption from PHP来自 PHP 的 PGP 加密
【发布时间】:2011-08-22 10:40:37
【问题描述】:

如果我运行命令

gpg -e -r john@doe.com my_secret_file.txt

在 unix 命令提示符下,它工作正常。但是当我尝试使用 PHP 使用相同的命令时,它不起作用:

$gpg = '/usr/bin/gpg';
$recipient = 'john@doe.com';
$secret_file = 'secret_file.txt';

echo shell_exec("$gpg -e -r $recipient $secret_file");

请指导我寻求解决方案。

【问题讨论】:

  • “不工作”是什么意思?您收到错误消息吗?出乎意料的输出?独角兽图片出现在屏幕上?
  • 感谢您的回复。它应该在同一目录中创建一个名为“secret_file.txt.pgp”的文件。它没有创建
  • 您是从命令行还是从网页运行 php 脚本?如果直接从命令行运行,会不会有报错信息?
  • 为什么$shell_exec("$gpg ...) 中?
  • 我们也可以使用 /usr/bin/gpg 来代替 $gpg

标签: php pgp public-key-encryption


【解决方案1】:

除了 Demento 建议的权限问题外,还有可能运行脚本的用户与您在命令行中工作时的用户不同,并且该用户没有 john@doe.com 的公钥,所以它不能为他加密文件。那么......哪个用户运行这个脚本?假设它是www-data,如果你这样做了

carlos@server:~$ su - www-data
(insert www-data's password or do sudo su - www-data if sudo it's available)
www-data@server:~$ gpg --list-keys

你看到 john@doe.com 的密钥了吗?

【讨论】:

    【解决方案2】:

    我在我的机器上尝试了您的示例,它按预期工作。结果是本地目录中名为secret_file.txt.gpg 的附加文件,为john@doe.com 加密。这确认您的实际脚本没有问题,并且可能存在其他问题。

    您不会看到脚本本身的任何输出,加密文件是在静默中生成的。程序最后一行的echo 什么都不做,因为如果没有问题,gpg 不会生成任何输出。你应该看看shell_exec的手册。

    如果文件不是在您的计算机上创建的,则可能是权限问题。如果您不是从命令行而是从 Web 应用程序调用脚本,则 Web 服务器用户需要对文件系统具有适当的权限才能创建新文件。

    【讨论】:

    • 谢谢。我已将几乎所有文件权限更改为 777。仍然无法正常工作。
    • 你能告诉我。你对.gnupg和.gnupg里面的所有文件有什么权限。“.gnupg”在根目录里面
    • “.gnupg”目录下的所有文件都有“-rw-------”。它们归运行 PHP 脚本的用户所有。您是说您正在查看根目录 - 您是否以 root 身份运行 php 脚本?如果您以其他用户身份运行它,则必须使用他的“主”目录中的“.gnupg”目录。
    【解决方案3】:

    您可以使用以下命令查看错误:

    $output = exec("$gpg -e -r $recipient $secret_file 2>&1", $out); 
    echo "<pre>$output</pre>";
    

    这将为您提供指导。

    可能出现的问题:

    • 您尝试加密的文件不在正确的路径中..
    • GnuPG 正在尝试使用“apache”作为用户写入 /root/.gnupg 目录。显然,除非您更改对此目录的访问权限(不推荐),否则这是不可能的。
    • 您无权访问 GnuPG 根目录(无论它在哪里)
    • 您没有 WRITE 在 dir 中 apache 正在尝试创建新文件..

    让我知道您的代码输出什么,我将能够提供帮助。我已经遇到过,很乏味。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2012-05-06
      相关资源
      最近更新 更多