从C#执行多个命令提示符命令

3
我想从C#中使用OpenSSL生成私钥。为了做到这一点,我尝试重定向进程标准输入,但我仍然遇到了一些问题。我提到我想在私钥上使用AES256加密,并且为了实现这一点,它需要一个密码。我的问题是我不知道如何将该密码传输给进程,也就是说,我创建进程,运行使用OpenSSL创建具有AES256加密的密钥的命令,接着我必须输入密码和确认密码。
以下是我的代码:
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
这些似乎很相关:运行命令提示符命令如何在C#中执行命令行 - jww
2
这个可以用。它使用同一进程执行多个命令行。 - Keyur Ramoliya
使用(StreamWriter sw = cmd1.StandardInput){ 如果(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
但它不起作用,它只是创建了一个文件,但是是空文件。 - Paul
@Paul - 请在您的问题中添加更多信息,例如非平凡代码。通过单击位于标签附近的左下角的“编辑”来执行此操作,例如 C#命令提示符 - jww
我完成了。如果您有任何不理解的地方,请告诉我。谢谢! - Paul
1个回答

3
你可以尝试以下方法:
    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\\test_file_com.key.pem 2048");
            sw.WriteLine("123456");
            sw.WriteLine("123456");
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接