BilldrBot BilldrBot - 4 years ago 231
C# Question

Decrypting a GPG string from command line

I'm trying to write a console application that will decrypt a gpg signature on request. Everything's going fine, EXCEPT for the part where it prompts for my GPG password. How do I call

gpg --decrypt
from the command line without a password dialog?

Here's my code so far:

var startInfo = new ProcessStartInfo("gpg.exe");
startInfo.Arguments = "--decrypt"; //this is where I want to insert "--passphrase MyFakePassword"
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.WorkingDirectory = @"C:\Program Files (x86)\GNU\GnuPG";

var proc = Process.Start(startInfo);
var sCommandLine = stringData + "\n"+(char)26+"\n"; //stringData is the encrypted string
proc.StandardInput.WriteLine(sCommandLine);
proc.StandardInput.Flush();
proc.StandardInput.Close();

var result = proc.StandardOutput.ReadToEnd();


I've tried using
--passphrase MyFakePassword
,
--passphrase-fd MyFakePassword
and even
--passphrase-fd 0
with my password on the first line of input. I'd like to avoid putting my password in a txt file on the machine that's running this code, if at all possible.

Thanks in advance for any help.

Answer Source

I did a bit more digging. A few months ago someone reported this as a bug on Gpg4Win's forums. The only solutions at this time are to roll back from 2.1.0 to a previous version (not an option in my case), disable the password for the key, or pipe it in from text. Here's the forum post: http://wald.intevation.org/forum/forum.php?thread_id=1116&forum_id=21&group_id=11 There is no comment from the development team.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download