3

着信ドキュメントを C# で暗号化しようとしていますが、GnuPG と入力リダイレクトを使用しています。パスフレーズを入力する必要がある単一のステップで -se(署名と暗号化) を使用する必要があります。しかし、何らかの理由で、入力のリダイレクトが機能していません。あなたの助けに感謝。コントロールはelseブロックになります。入力を待っているデッドロックまたは子プロセス (gpg.exe) があるかどうかはわかりません。

pgpproc = new Process();
pgpproc.StartInfo.FileName = exeFilePath;
pgpproc.StartInfo.RedirectStandardOutput = false;
pgpproc.StartInfo.RedirectStandardInput = true;
pgpproc.StartInfo.UseShellExecute = false;
pgpproc.StartInfo.Arguments = "-a  -o C:\PGPStaging\output.pgp -se -r recipientID C:\PGPStaging\input.txt";
pgpproc.StartInfo.CreateNoWindow = true;
pgpproc.Start();
StreamWriter myStreamWriter = pgpproc.StandardInput;
myStreamWriter.Write("*****");
myStreamWriter.Close();

if (pgpproc.WaitForExit(waittime))
{
  //success
}
else
{
  //failure
  pgpproc.Kill();
  pgpproc.WaitForExit();
}

`

4

3 に答える 3

1

GnuPGコマンドラインに追加--passphrase-fd 0して、標準入力からパスワードを読み取るように指示してみてください。

于 2010-06-19T10:40:27.953 に答える
1

最初にできることは、リダイレクションを削除し、自分でコンソールを見て、gnupg が何をしているのか、何を待っているのかを知ることです。次に、改行文字 (\n または 0x13 または 0x130x10、すべてのバリエーションを試す) をパスワードの末尾に追加してみてください。何かを入力したら、Enter キーを押してそれを渡します。ここでも同じことを行う必要があります。最後に、OpenPGPBlackboxを使用して、外部アプリケーションなしで操作を実行できます。

于 2010-06-15T08:23:48.713 に答える
0

復号化を実行しなければならなかったときに、同じ問題が発生しました。私がやったことは、パスフレーズをそのようにパイプすることです。

    procStartInfo.Arguments = @"/c echo " + passphrase + @"| c:\gnupg\gpg --passphrase-fd --     decrypt --output " + "\"" + fileLocationToDecryptTo + "\"" + " \"" + fileLocationToDecryptFrom     + "\"";

それはかなりうまくいくようです。

于 2013-01-24T20:46:04.773 に答える