我试图在PHP脚本中的字符串中加入GPG clear-signed of text.我可以使GPG加密字符串中的文本,如下所示:
$encrypted = shell_exec("echo '$text' | gpg -e -a -r [email protected] --trust-model always");
这是完美的,加密文本发送到$encrypted变量.这证明GNUPGHOME和GNUPG设置正确.
$text = "googar";
$signature = exec("echo $passphrase | gpg -v --clearsign --no-tty --passphrase-fd 0 '$text' 2>&1 1> /dev/null", $output);
我收到此错误:
... string(51) "gpg: can't open `googar': No such file or directory"
[3]=>
string(46) "gpg: googar: clearsign Failed: file open error"
}
返回此错误,包含或不包含$text变量周围的单引号.
如何强制GPG或shell_exec将$text视为管道而不是查找文件?
我需要以这种方式回应密码(我知道,它’非常不安全’,因为GPG无法在密码中传递密码作为命令行上的变量.
解决方法:
您可以使用proc_open并为您的密码创建单独的文件描述符:
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w"),
3 => array("pipe", "r"),
);
$pipes = false;
$process = proc_open("gpg -v --clearsign --no-tty --passphrase-fd 3", $descriptorspec, $pipes);
if(is_resource($process)) {
fwrite($pipes[3], $passphrase);
fclose($pipes[3]);
fwrite($pipes[0], $text);
fclose($pipes[0]);
$output = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[1]);
fclose($pipes[2]);
$retval = proc_close($process);
echo "retval = $retval\n";
echo "output= $output\n";
echo "err= $stderr\n";
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。