【问题标题】:PGP Encrypt from C# using GnuPG使用 GnuPG 从 C# 加密 PGP
【发布时间】:2010-06-15 03:28:07
【问题描述】:

我正在尝试在 C# 中加密传入的文档,并且我正在使用带有输入重定向的 GnuPG。我需要在一个步骤中使用 -se(签名和加密),这需要输入密码。但由于某种原因,输入重定向不起作用。感谢你的帮助。 控制将阻塞。 我不确定是否有死锁或子进程(gpg.exe)在等待输入。

pgpproc = new Process();
pgpproc.StartInfo.FileName = exeFilePath;
pgpproc.StartInfo.RedirectStandardOutput = false;
pgpproc.StartInfo.RedirectStandardInput = true;
pgpproc.StartInfo.UseShellExecute = false;
pgpproc.StartInfo.Arguments = "-a  -o C:\PGPStaging\output.pgp -se -r recipientID C:\PGPStaging\input.txt";
pgpproc.StartInfo.CreateNoWindow = true;
pgpproc.Start();
StreamWriter myStreamWriter = pgpproc.StandardInput;
myStreamWriter.Write("*****");
myStreamWriter.Close();

if (pgpproc.WaitForExit(waittime))
{
  //success
}
else
{
  //failure
  pgpproc.Kill();
  pgpproc.WaitForExit();
}

`

【问题讨论】:

    标签: c# encryption gnupg pgp


    【解决方案1】:

    您可以做的第一件事是删除重定向并自己查看控制台以了解 gnupg 正在做什么/等待什么。接下来,尝试在密码末尾添加换行符(\n 或 0x13 或 0x130x10,尝试所有变体) - 当您输入内容时,按 Enter 传递它,您也必须在此处执行相同操作。 最后,您可以使用OpenPGPBlackbox 进行操作,无需外部应用程序。

    【讨论】:

      【解决方案2】:

      尝试在 GnuPG 命令行中添加--passphrase-fd 0 以指示它从标准输入读取密码。

      【讨论】:

        【解决方案3】:

        当我不得不执行一些解密时,我遇到了同样的问题。我最终做的是像这样管道密码。

            procStartInfo.Arguments = @"/c echo " + passphrase + @"| c:\gnupg\gpg --passphrase-fd --     decrypt --output " + "\"" + fileLocationToDecryptTo + "\"" + " \"" + fileLocationToDecryptFrom     + "\"";
        

        它似乎工作得很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-17
          • 1970-01-01
          • 2012-05-06
          • 2016-09-11
          • 2011-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多