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

本文关键字:一行 GnuPG 调用 解密 加密 为什么 | 更新日期: 2023-09-27 17:50:51

我正在使用GnuPG在Visual Studio 2012中使用c#加密文件。

当我解密这个加密文件时,它不显示文件中的行头。以下是我为加密所写的内容。

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 is:

               "Dave, 19
                Ryan, 21";

我想用头解密它。我遗漏了什么?

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

您告诉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

解决方法:将--passphrase-fd 0从参数中移除