使用PHP加密GPG

时间:2011-10-13 08:43:32

标签: php windows exec gnupg

我需要帮助使用GPG加密PHP中的文件。我做了一些研究,但我找不到解决方案。

在命令行中使用GPG可以很好地工作,但是当我从PHP尝试时,我得到一个返回值2。 我也尝试将'--yes --always-trust'作为额外的开关传递给命令,如其中一个答案中提出的那样,但没有快乐。

我尝试使用PHP内置的gnupg函数 - 我发现的所有示例都显示了如何加密字符串而不是文件。将文件作为字符串读取对我来说不起作用,因为我正在处理大到15MB的大文件。

我需要帮助!

环境详情

OS: Windows 7
PHP installation: WAMP Server 2.1

代码

$path = "c:\wamp\www";
$recipient = "Test user";
$encrypted_file = "c:\wamp\www\test.txt.gpg";
$decrypted_file = "c:\wamp\www\decrypted_test.txt";
$plain_file = "c:\wamp\www\test.txt";

exec('gpg --homedir $path --recipient $recipient --output $encrypted_file --encrypt $plain_file --yes --always-trust', $answer, $rtn);

var_dump($answer);
var_dump($rtn);
echo "<br />ANSWER: ".$answer;
echo "<br />RTN: ".$rtn;

输出

array(0) { } int(2) 
ANSWER: Array
RTN: 2
PHP User: nt authority\system

2 个答案:

答案 0 :(得分:1)

尝试更改

exec('gpg --homedir $path --recipient $recipient --output $encrypted_file --encrypt                     $plain_file --yes --always-trust', $answer, $rtn);

exec("gpg --homedir $path --recipient $recipient --output $encrypted_file --encrypt                     $plain_file --yes --always-trust", $answer, $rtn);

注意我将单引号改为双引号

http://php.net/manual/en/language.types.string.php

答案 1 :(得分:0)

你混淆使用单引号和&amp;双引号。

$path = 'c:\wamp\www';
$recipient = 'Test user';
$encrypted_file = 'c:\wamp\www\test.txt.gpg';
$decrypted_file = 'c:\wamp\www\decrypted_test.txt';
$plain_file = 'c:\wamp\www\test.txt';

在这一行:

exec("C:\\Wamp\\WWW\\gpg --homedir $path --recipient $recipient --output $encrypted_file --encrypt                     $plain_file --yes --always-trust", $answer, $rtn);

当需要PHP解析字符串时使用双引号(记下Escape字符);当字符串不需要解析时使用单引号。