2

我正在使用命令行来加密我发送的文件,但我试图弄清楚如何使用相同的方法来解密它们。如果我运行命令,它会提示输入密码,但我看不到使用命令行传递密码的方法。这是我加密文件的方式:

var proc = new Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.WorkingDirectory = "C:\\";
proc.StartInfo.FileName = @"C:\Progra~1\GNU\GnuPG\gpg.exe";
proc.StartInfo.Arguments = @"-e -u ""user1@example.com"" -r ""user2@example.com"" ""C:\file.csc""";
proc.Start();
proc.WaitForExit();

** 这是用于我的解决方案的有用链接:http: //social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/38c21304-fc7a-42cc-a5fb-dcb6da7f6411/

4

3 回答 3

2

属性Process.StandardInput应该为您提供一个 StreamWriter,您可以使用它来提供标准输入的密码。

于 2010-11-01T14:52:25.943 回答
0

Linux 上的 GPG 具有--passphrase-fd N,其中N是 int。如果 N == 0,则从标准输入读取密码。

不确定这是否同样适用于 Windows,但可能值得一试。

于 2010-11-01T14:55:50.963 回答
0

用于--passphrase-fd 0让 GPG 从标准输入获取密码,然后使用管道将其传递。

echo 123456| gpg --passphrase-fd 0 -e -u user1@example.com -r user2@example.com C:\file.csc

或者

gpg --passphrase-fd 0 -e -u user1@example.com -r user2@example.com --passphrase-fd 2 file.csc < password.file

确保您不会以某种方式在标准输入上传递任何额外的空格,因为 GPG 不能很好地处理这些空格。

我不确定如何在.NET 上的标准输入上传递一些东西,所以你必须填补那里的空白。

于 2010-11-01T14:57:40.757 回答