我的任务是解密从各种FTP站点检索到的pgp文件。我们在服务器上安装了GNUPG。我也评估了Bouncy Castle和StarkSoft。我真的不想购买商业解密软件。因此,我正在寻找使用Bouncy Castle或.NET Framework 4.5本身内容来完成此解密任务的方法。如果您使用GNUPG解密了pgp文件,请分享您博客文章的链接或提供有关您的方法的一些见解。
答案 0 :(得分:1)
有两种常见的GPG口味,一种需要在命令行上使用--passphrase-fd 0来告诉它从标准输入中读取密码,而另一种不需要,我忘记了哪个版本需要它,但它是文档IIRC中模糊不清。
一切都只是正确地调用子进程。这是我的一个编辑的剪辑。
private string GPGEncrypt(string src)
{
FileInfo fi = new FileInfo(src);
string OutputName = GetEncryptedName(src);
if (File.Exists(OutputName))
{
if (!chkOverwrite.Checked)
{
SetStatus("Output file already exists - " + OutputName);
return "";
}
}
string path = fi.DirectoryName;
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(props.PGPExecutable);
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
psi.RedirectStandardError = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.WorkingDirectory = Path.GetDirectoryName(props.PGPExecutable);
string args = string.Format(
" --encrypt --recipient {0} --output \"{1}\" \"{2}\""
, txtEncryptID.Text.Trim() // 1
, OutputName // 2
, src // 3
);
txtCommandLine.Text = args;
psi.Arguments = args;
System.Diagnostics.Process process = System.Diagnostics.Process.Start(psi);
// process.StandardInput.WriteLine(CommandLine);
// process.StandardInput.Flush();
// process.StandardInput.Close();
process.WaitForExit();
int rc = process.ExitCode;
process.Close();
txtCommandLine.Text = string.Format("{0} exited with return code {1},", Path.GetFileName(props.PGPExecutable), rc);
return OutputName;
}