Adrián Silvestre
Adrián Silvestre

Reputation: 145

gnupg decrypt command with php with passphrase

Im using Gnupg to decrypt a file:

gpg --decrypt -o file.xml file.gpg

You need a passphrase to unlock the secret key for
user: "TEST-COMPANY (DAM Key) <[email protected]>"
4096-bit RSA key, ID 257C2D21, created 2018-04-23

Enter passphrase: 

Then I write this passphrase and then works.

And now I want to make it automatic using this command on PHP:

$command = 'gpg --decrypt -o file.xml file.gpg'
exec($command);

The problem came when system ask for phassphrase.

I tried this:

$command = 'gpg --decrypt -o file.xml file.gpg | [Passphrase]'

but doesn't work.

Any idea about this?

Thank you

Upvotes: 1

Views: 3128

Answers (1)

Josh888
Josh888

Reputation: 31

Just adding the answer that the OP and @CD001 figured out in the comments, because it helped me immensely (thanks!), and seems like a common issue (secret key was generated with passphrase, and generating new keys isn't an option). I was pulling my hair out trying to decrypt with the GnuPG functions, before learning that as of GnuPG 2.1, it can't decrypt a file with passphrase-generated key (as noted in comment here). Configuring gpg-agent with a preset passphrase may work fine, but I much prefer what the OP here did.

$encrypted_file = "file.csv.pgp";
$path_to_file = $_SERVER["DOCUMENT_ROOT"]."/dir1/dir2";
$passphrase = "passphrase";
$command = "echo {$passphrase} | gpg --passphrase-fd 0 --batch --yes {$path_to_file}/{$encrypted_file}";
exec($command);

If successful, the decrypted file will be in the same directory, without the .pgp extension. So make sure it was successful...

$decrypted_file = str_replace(".pgp", "", $encrypted_file );
if (file_exists("{$path_to_file}/{$decrypted_file}")) {
    echo "Successfully decrypted $encrypted_file to $decrypted_file";
}

Upvotes: 3

Related Questions