Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Decrypting a GPG string from command line

Tags:

c#

gnupg

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.

like image 384
BilldrBot Avatar asked Mar 25 '13 21:03

BilldrBot


People also ask

How do I decrypt a gpg file in Linux command line?

To decrypt the file, they need their private key and your public key. You'll see from this that public keys must be shared. You need to have the public key of the recipient in order to encrypt the file, and the recipient needs your public key to decrypt it.

How do I decrypt an encrypted string?

Decryption Approach:Find the length L of the string. Find the ceil and floor values of √Length and assign them to the variables. Create a 2D matrix and fill the matrix by characters of string column-wise. Read the matrix row-wise to get the decrypted string.


2 Answers

Use the --batch --passphrase-fd options together, .eg gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp

In your code, after proc.StandardInput.WriteLine(sCommandLine); add this:

proc.StandardInput.WriteLine("your passphrase here");
proc.StandardInput.Flush();
like image 130
amol Avatar answered Sep 18 '22 00:09

amol


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.

like image 25
BilldrBot Avatar answered Sep 18 '22 00:09

BilldrBot