PGP шифрование из C # с использованием GnuPG - PullRequest
3 голосов
/ 15 июня 2010

Я пытаюсь зашифровать входящий документ в C #, и я использую GnuPG с перенаправлением ввода.Мне нужно использовать -se (подписать и зашифровать) за один шаг, который требует ввода пароля.Но по какой-то причине перенаправление ввода не работает.Ценю твою помощь.Контроль собирается блокировать еще.Я не уверен, есть ли тупик или дочерний процесс (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();
}

`

Ответы [ 3 ]

1 голос
/ 19 июня 2010

Попробуйте добавить --passphrase-fd 0 в командную строку GnuPG, чтобы дать ему команду считывать пароль из стандартного ввода.

1 голос
/ 15 июня 2010

Первое, что вы можете сделать, это удалить перенаправление и самостоятельно посмотреть консоль, чтобы узнать, что делает / ждет gnupg. Затем попробуйте добавить символ новой строки (\ n или 0x13 или 0x130x10, попробуйте все варианты) в конец пароля - когда вы набираете что-то, вы нажимаете Enter, чтобы передать его, и вы должны сделать то же самое и здесь. Наконец, вы можете использовать OpenPGPBlackbox для выполнения операции без внешних приложений.

0 голосов
/ 25 января 2013

У меня была такая же проблема, когда мне приходилось выполнять расшифровку.То, что я в итоге сделал, это воткнул фразу-пароль вот так.

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

Кажется, это работает довольно хорошо.

...