为什么从C#调用GnuPG时加密和解密后第一行丢失了?

为什么从C#调用GnuPG时加密和解密后第一行丢失了?,c#,.net,encryption,gnupg,C#,.net,Encryption,Gnupg,我正在使用C#在Visual Studio 2012中使用GnuPG加密一个文件 当我解密这个加密文件时,它不会在文件中显示行标题。 下面是我为加密编写的内容 string gpgOptions = "--homedir "C:\GnuPG" --batch --yes --encrypt --armor --recipient ankit.gupta1@nirvana-sol.com --default-key ankit.gupta1@nirvana-sol.com --passphrase

我正在使用C#在Visual Studio 2012中使用GnuPG加密一个文件

当我解密这个加密文件时,它不会在文件中显示行标题。 下面是我为加密编写的内容

string gpgOptions = "--homedir "C:\GnuPG" --batch --yes --encrypt --armor --recipient ankit.gupta1@nirvana-sol.com --default-key ankit.gupta1@nirvana-sol.com --passphrase-fd 0 --no-verbose"; 
string inputText = "Name, Age
                    Dave, 19
                    Ryan, 21";

ProcessStartInfo pInfo = new ProcessStartInfo(gpgExecutable, gpgOptions);

pInfo.CreateNoWindow = true;
pInfo.UseShellExecute = false;

pInfo.RedirectStandardInput = true;
pInfo.RedirectStandardOutput = true;
pInfo.RedirectStandardError = true;
_processObject = Process.Start(pInfo);
_processObject.StandardInput.Write(inputText);
我使用以下命令使用stdin对其进行解密:

gpg  --output my.csv --decrypt A.gpg
my.csv是:

               "Dave, 19
                Ryan, 21";

我希望它被解密的标题。我在这里遗漏了什么?

您正在告诉
gpg
使用
--passphrase fd 0
从stdin读取密码短语。因此,GnuPG将使用第一个换行符之前的所有内容作为密码

无论如何,这是可行的,因为加密不需要任何密码短语。尝试以下方法(示例适用于unix系统,而不是Windows,但在那里看起来可能没有太大不同)来演示问题:

$ cat <<EOT | gpg -e --passphrase-fd 0 --recipient email@jenserat.de | gpg -d
> foo
> bar
> EOT
Reading passphrase from file descriptor 0

You need a passphrase to unlock the secret key for
user: "Jens Erat <email@jenserat.de>"
2048-bit RSA key, ID 3A5E68F7, created 2010-12-12 (main key ID D745722B)

gpg: encrypted with 2048-bit RSA key, ID 3A5E68F7, created 2010-12-12
      "Jens Erat <email@jenserat.de>"
bar
$cat条
>EOT
正在从文件描述符0读取密码短语
您需要密码短语来解锁的密钥
用户:“Jens Erat”
2048位RSA密钥,ID 3A5E68F7,创建于2010-12-12(主键ID D745722B)
gpg:使用2048位RSA密钥加密,ID为3A5E68F7,创建于2010-12-12
“Jens Erat”
酒吧

解决方案:从参数中删除
--passphrase fd 0

您是说您加密了一个文件,然后当您解密它时,它与原始文件不一样吗?是的,这就是问题所在。如果您只在命令行上执行命令,它可以工作吗?是的,它可以与命令行一起工作