Командная строка GPG расшифровывается с помощью c # - кодовой фразы? - PullRequest
2 голосов
/ 01 ноября 2010

Я использую командную строку для шифрования отправляемых файлов, но пытаюсь выяснить, как использовать тот же метод для их расшифровки.Если я запускаю команду, ей предлагается ввести фразу-пароль, но я не вижу способа передать фразу-пароль с помощью командной строки.Вот как я шифрую файл:

var proc = new Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.WorkingDirectory = "C:\\";
proc.StartInfo.FileName = @"C:\Progra~1\GNU\GnuPG\gpg.exe";
proc.StartInfo.Arguments = @"-e -u ""user1@example.com"" -r ""user2@example.com"" ""C:\file.csc""";
proc.Start();
proc.WaitForExit();

** Вот полезная ссылка, которая использовалась для моего решения: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/38c21304-fc7a-42cc-a5fb-dcb6da7f6411/

Ответы [ 3 ]

2 голосов
/ 01 ноября 2010

Свойство Process.StandardInput должно предоставлять вам StreamWriter, который вы можете использовать для предоставления ключевой фразы для стандартного ввода.

0 голосов
/ 01 ноября 2010

Используйте --passphrase-fd 0, чтобы получить GPG, чтобы получить фразу-пароль от stdin, а затем передать ее с помощью канала.

echo 123456| gpg --passphrase-fd 0 -e -u user1@example.com -r user2@example.com C:\file.csc

или

gpg --passphrase-fd 0 -e -u user1@example.com -r user2@example.com --passphrase-fd 2 file.csc < password.file

Убедитесь, что вы как-то не пропускаете лишние пробелы в stdin, поскольку GPG плохо с этим справляется.

Я не уверен, как вы можете передать что-то на stdin в .NET, поэтому вам придется восполнить этот пробел.

0 голосов
/ 01 ноября 2010

GPG в Linux имеет - passphrase-fd N , где N - это int.Если N == 0, фраза-пароль считывается со стандартного ввода.

Не уверен, применимо ли это в Windows, но, возможно, стоит проверить.

...