PHPスクリプトの文字列にテキストのGPGクリア署名を組み込むことを試みています。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にはコマンドラインで変数としてパスフレーズを渡す方法がないため、「ひどく安全ではありません」。