我正在尝试将 GPG 文本的明确签名合并到 PHP 脚本中的字符串中。我可以使 GPG 加密字符串中的文本,如下所示:
$encrypted = shell_exec("echo '$text' | gpg -e -a -r foo@bar.com --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 无法在命令行上将密码作为变量传递。