我们怎样才能避免在C#for Windows中使用gnupg密码提示?

时间:2018-04-06 03:06:46

标签: c# asp.net encryption gnupg passphrase

我正在尝试将我们的遗留代码从gnupg1.x升级到gnupg2.2.4。这是在Windows机器上,我为windows gnupg-w32-2.2.4_20171220.exe安装了gnupg。

我被卡住了,因为我的C#应用​​程序一直提示我输入密码短语和超时,并且无法解密文件并且进程失败。此时此应用程序运行时没有太多用户干预,我们仍然希望这样。无论如何都要避免每次gnupg尝试解密文件时出现的密码短语提示? 这是我当前的代码基于来自该社区的其他反馈,但我无法弄清楚我做错了什么。它目前创建一个空文件,没有内容。虽然我的加密文件确实包含内容。 我还读到了关于使用gpg --preset-passphrase但我的发布团队不鼓励我使用它。你能帮忙吗?

   string _commandlineParams = "--home " + gnuHomedir + " --default-key " + "myRealIDKey" + " --batch" + " --passphrase-fd 0" + " --decrypt " + pathAndfile;

   string vgpg = "echo " + gphrase + "|gpg ";
   string gpgExecutable = Path.Combine(gnuBinDirectory, "gpg");

   ProcessStartInfo pInfo = new ProcessStartInfo(gpgExecutable, _commandlineParams);

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

   pInfo.RedirectStandardInput = true;
   pInfo.RedirectStandardOutput = true;
   pInfo.RedirectStandardError = true;

   string sCommandLine = vgpg + " " + _commandlineParams;
   if (sCommandLine != null)
   {
       _processObject.StandardInput.WriteLine(sCommandLine);
        //_processObject.StandardInput.WriteLine(gphrase); -- tried this too but didnt work
       _processObject.StandardInput.Flush();
   }

   _processObject.StandardInput.Close();

1 个答案:

答案 0 :(得分:0)

我也面临同样的问题。它在GUI中反复询问Passphrase。因此,经过多次猎头找到了解决方案。

将命令文本用作

gpg --output "decrypted_file_name" --batch --passphrase "passphrase_goes_here" --decrypt "encrypted_file_name"