gnupg用密码用php解密命令

时间:2018-06-21 13:50:02

标签: php linux encryption server gnupg

我正在使用Gnupg解密文件:

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

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

Enter passphrase: 

然后我编写此密码短语,然后可以使用。

现在我想在PHP上使用此命令使其自动完成:

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

问题出在系统要求输入短语。

我尝试过:

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

但不起作用。

对此有任何想法吗?

谢谢

1 个答案:

答案 0 :(得分:2)

只需添加OP和@ CD001在注释中指出的答案,因为它极大地帮助了我(谢谢!),而且似乎是一个常见问题(秘密密钥是使用密码生成的,而生成新密钥不是一个选项)。在得知从GnuPG 2.1开始,它无法使用密码短语生成的密钥解密文件时(如评论here中所述),我一直在努力尝试使用GnuPG函数进行解密。使用预设的密码短语配置gpg-agent可能会很好,但是我更喜欢这里的OP所做的事情。

$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);

如果成功,则解密的文件将位于同一目录中,而没有.pgp扩展名。因此,请确保它成功...

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