提问人:Abhishek 提问时间:11/2/2023 最后编辑:Abhishek 更新时间:11/2/2023 访问量:65
生成 Openssl 签名
Generate Openssl signature
问:
我正在尝试使用源文件的私钥生成签名文件。当我在命令提示符下运行该命令时,该命令工作正常。但是当我尝试通过代码执行相同的操作时,签名不会生成。
这是我正在使用的代码
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)
{
}
}
答:
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
有什么适用于旧框架的吗?
评论