【发布时间】:2016-10-29 09:14:38
【问题描述】:
我正在尝试从 c# 使用 OpenSSL 生成私钥。为了做到这一点,我试图重定向进程标准输入,但我仍然有一些问题。 我提到我想对私钥使用 aes256 加密,为了实现这一点,它需要一个密码,所以,我的问题是我不知道如何将该密码传输到进程,我的意思是我创建了在这个过程中,我运行命令以使用 aes256 加密的 OpenSSL 创建密钥,然后我必须输入密码和确认密码。
这是我的代码:
Process cmd1 = new Process();
cmd1.StartInfo.FileName = "cmd.exe";
cmd1.StartInfo.RedirectStandardInput = true;
cmd1.StartInfo.RedirectStandardOutput = true;
cmd1.StartInfo.CreateNoWindow = true;
cmd1.StartInfo.UseShellExecute = false;
cmd1.StartInfo.WorkingDirectory = @"C:\usr\local\ssl\bin";
cmd1.Start();
cmd1.StandardInput.WriteLine("openssl genrsa -aes256 -out E:\\testing_folder\\urian_test7.com.key.pem 2048");
cmd1.StandardInput.Flush();
cmd1.StandardInput.WriteLine("123456");
cmd1.StandardInput.Flush();
cmd1.StandardInput.WriteLine("123456");
cmd1.StandardInput.Flush();
cmd1.StandardInput.Close();
Console.WriteLine("We're done! You got the key!");
cmd1.Close();
所以,我不知道如何发送私钥生成所需的密码...我的意思是,如果我在 cmd/openssl 中运行该命令(例如:openssl genrsa -aes256),它会生成 RSA 私有键,然后它要求我介绍密码短语和密码短语验证。那么,如果我想从 c# 中做到这一点,我该怎么做呢?因为我不知道如何传输该密码。我就是这个意思。
【问题讨论】:
-
This 可以。它使用相同的进程执行多个命令行。
-
使用 (StreamWriter sw = cmd1.StandardInput) { if(sw.BaseStream.CanWrite) { sw.WriteLine("openssl genrsa -aes256 -out E:\\testing_folder\\urian_test_final4.com.key .pem 2048"); sw.WriteLine("123456"); sw.WriteLine("123456"); } }
-
但是它不起作用,它只是创建文件,但是一个空文件。
-
@Paul - 请在您的问题中添加其他信息,例如重要的代码。通过单击 C# 和 Command Prompt等标签附近左下角的 Edit 来执行此操作>.
标签: c# command-line cmd openssl command-prompt