Apache Commons Exec で起動されたコマンドの stdin にテキスト引数をパイプする必要があります (興味深いことに、コマンドは gpg で、引数はキーストアへのパスフレーズです。gpg にはパスフレーズを明示的に提供する引数がありません。標準入力から受け入れる)。
さらに、Linux と Windows の両方をサポートするためにこれが必要です。
私がするシェルスクリプトで
cat mypassphrase|gpg --passphrase-fd
また
type mypassphrase|gpg --passphrase-fd
ただし、タイプは実行可能ファイルではなく、解釈されたコマンド (cmd.exe) に組み込まれたコマンドであるため、Windows では機能しません。
(上記の理由で)動作しないコードは以下のとおりです。これのためにシェル全体を生成するのはあまりにも醜いので、よりエレガントなソリューションを探していました。残念ながら、BouncyCastle ライブラリと PGP の間にはいくつかの非互換性の問題があるため、(非常に短い) 時間内に完全にプログラム化されたソリューションを使用することはできません。
前もって感謝します。
CommandLine cmdLine = new CommandLine("type");
cmdLine.addArgument(passphrase);
cmdLine.addArgument("|");
cmdLine.addArgument("gpg");
cmdLine.addArgument("--passphrase-fd");
cmdLine.addArgument("0");
cmdLine.addArgument("--no-default-keyring");
cmdLine.addArgument("--keyring");
cmdLine.addArgument("${publicRingPath}");
cmdLine.addArgument("--secret-keyring");
cmdLine.addArgument("${secretRingPath}");
cmdLine.addArgument("--sign");
cmdLine.addArgument("--encrypt");
cmdLine.addArgument("-r");
cmdLine.addArgument("recipientName");
cmdLine.setSubstitutionMap(map);
DefaultExecutor executor = new DefaultExecutor();
int exitValue = executor.execute(cmdLine);