1

私は、さまざまな FTP サイトから取得した pgp ファイルを解読する任務を負っています。サーバーにGNUPGがインストールされています。Bouncy Castle と StarkSoft も評価しました。商用の復号化ソフトウェアを購入するつもりはありません。したがって、Bouncy Castle または .NET Framework 4.5 自体内の何かを使用して、この復号化タスクを実行する方法を探しています。GNUPG を使用して pgp ファイルを復号化した場合は、ブログ投稿へのリンクを共有するか、アプローチに関する洞察を提供してください。

4

1 に答える 1

1

GPG の一般的なフレーバーには 2 つのフレーバーがあり、1 つは標準入力からパスフレーズを読み取るようにコマンド ラインで --passphrase-fd 0 を要求する必要があり、もう 1 つは不要です。どのバージョンが必要かは忘れましたが、 docs IIRC.

すべてがサブプロセスを正しく呼び出すだけです。これは、これを行う私のプログラムの 1 つからのクリップです。

private string GPGEncrypt(string src)
{
  FileInfo fi = new FileInfo(src);
  string OutputName = GetEncryptedName(src);
  if (File.Exists(OutputName))
  {
    if (!chkOverwrite.Checked)
    {
      SetStatus("Output file already exists - " + OutputName);
      return "";
    }
  }

  string path = fi.DirectoryName;

  System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(props.PGPExecutable);
  psi.CreateNoWindow = true;
  psi.UseShellExecute = false;
  psi.RedirectStandardError = true;
  psi.RedirectStandardInput = true;
  psi.RedirectStandardOutput = true;
  psi.WorkingDirectory = Path.GetDirectoryName(props.PGPExecutable);

  string args = string.Format(
    " --encrypt --recipient {0} --output \"{1}\" \"{2}\""
    , txtEncryptID.Text.Trim() // 1
    , OutputName // 2
    , src // 3
  );

  txtCommandLine.Text = args;

  psi.Arguments = args;

  System.Diagnostics.Process process = System.Diagnostics.Process.Start(psi);
  // process.StandardInput.WriteLine(CommandLine);
  // process.StandardInput.Flush();
  // process.StandardInput.Close();
  process.WaitForExit();
  int rc = process.ExitCode;
  process.Close();

  txtCommandLine.Text = string.Format("{0} exited with return code {1},", Path.GetFileName(props.PGPExecutable), rc);

  return OutputName;
}
于 2013-10-31T15:36:22.657 に答える