生成 Openssl 签名

Generate Openssl signature

提问人:Abhishek 提问时间:11/2/2023 最后编辑:Abhishek 更新时间:11/2/2023 访问量:65

问:

我正在尝试使用源文件的私钥生成签名文件。当我在命令提示符下运行该命令时,该命令工作正常。但是当我尝试通过代码执行相同的操作时,签名不会生成。

这是我正在使用的代码

    static void CreateOpenSSLSignature(string sourceFile, string sslPrivateKeyPath)
    {
        // Get required values
        if (File.Exists(signatureFilepath))
        {
            File.Delete(signatureFilepath);
        }
        var sigFile = File.Create(signatureFilepath);
        sigFile.Close();
        try
        {
            // Start decryption process
            Process myProcess = new Process();
            myProcess.StartInfo.FileName = openSSLPath + "\\bin\\openssl.exe";
            myProcess.StartInfo.WorkingDirectory = openSSLPath + "/bin/";
            myProcess.StartInfo.RedirectStandardInput = true;
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.StartInfo.RedirectStandardOutput = true;
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.StartInfo.RedirectStandardError = true;
            myProcess.StartInfo.ErrorDialog = true;
            string arg = dgst -sha1 -sign sslPrivateKeyPath -binary sourcefilepath | openssl enc -base64             
            >> signaturefilepath
            myProcess.StartInfo.Arguments = arg.ToString();
            myProcess.Start();
            myProcess.WaitForExit(10000);            }
        catch (Exception ex)
        {
        }
    }
C# OpenSSL 加密 SHA1

评论

0赞 Denis Micheal 11/2/2023
您正在捕获异常,并且不对它执行任何操作,要么抛出它,要么将其记录到控制台。
0赞 Abhishek 11/2/2023
我正在记录它,我在这里没有提到它。我面临的问题是,一旦我通过上述代码形成命令并在命令提示符下运行它,它就可以工作,但此代码中的相同命令却不是。而且代码也没有抛出任何错误。

答:

0赞 Ramin Alirezaee 11/2/2023 #1

以这种方式检查。“设置您的 OpenSSL 路径”:

string openSSlPath = "C:\\Program Files\\Git\\mingw64\\bin";
try
{
    Process obj = new Process
    {
        StartInfo =
                {
                    FileName = openSSlPath + "\\openssl.exe",
                    WorkingDirectory = (openSSlPath ?? "")
                }
    };
    ProcessStartInfo startInfo = obj.StartInfo;
    DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(115, 2);
    defaultInterpolatedStringHandler.AppendLiteral("dgst -sha1 -sign ");
    defaultInterpolatedStringHandler.AppendFormatted($"{sslPrivateKeyPath}");
    defaultInterpolatedStringHandler.AppendLiteral(" -binary ");
    defaultInterpolatedStringHandler.AppendFormatted($"{sourcefilepath}");
    defaultInterpolatedStringHandler.AppendLiteral(" | openssl enc -base64 >> ");
    defaultInterpolatedStringHandler.AppendFormatted($"{signaturefilepath}");
    startInfo.Arguments = defaultInterpolatedStringHandler.ToStringAndClear();
    obj.Start();
    obj.WaitForExit();
}
catch (Exception ex)
{
    Console.WriteLine(ex.ToString());
}

评论

0赞 Abhishek 11/2/2023
我们可以在 dotnet core 中使用 DefaultInterpolatedStringHandler 吗?
0赞 Ramin Alirezaee 11/2/2023
是的,我在使用 .NET 6 的控制台应用程序中做到了这一点。什么版本?learn.microsoft.com/en-us/dotnet/api/......
0赞 Abhishek 11/2/2023
我认为 dotnet core 3.1 框架不支持 DefaultInterpolatedStringHandler。
0赞 Ramin Alirezaee 11/2/2023
是的,它仅在 .NET 6 及更高版本中可用。
0赞 Abhishek 11/2/2023
有什么适用于旧框架的吗?