从c#

时间:2016-10-29 09:14:38

标签: c# command-line cmd openssl command-prompt

我正在尝试使用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#中做到这一点,我该怎么办呢?因为我不知道如何传递那个密码短语。这就是我的意思。

1 个答案:

答案 0 :(得分:1)

您可以尝试:

    Process cmd = new Process();

    cmd.StartInfo.FileName = "cmd.exe";
    cmd.StartInfo.RedirectStandardInput = true;
    cmd.StartInfo.UseShellExecute = false;

    cmd.Start();

    using (StreamWriter sw = cmd.StandardInput)
    {
        if (sw.BaseStream.CanWrite)
        {
            sw.WriteLine("openssl genrsa -aes256 -out E:\\testing_folder\\urian_test7.com.key.pem 2048");
            sw.WriteLine("123456");
            sw.WriteLine("123456");
        }
    }