问题描述
我喜欢将OpenSSL的外部过程调用更改为直接在C#中进行解密
string openSSLPath = Path.Combine(Directory.GetCurrentDirectory(),"openssl-1.0.2_win32","openssl.exe");
Process process = new Process();
processstartinfo startInfo = new processstartinfo
{
FileName = openSSLPath,UseShellExecute = false,Arguments = $"smime -decrypt -stream -binary -aes-256-cbc -in \"{inputFilePath}\" -inform DER -out \"{outputFilePath}\" -inkey \"{privateKeyFilePath}\" -passin pass:\"{privateKeyPassword}\""
};
process.StartInfo = startInfo;
process.Start();
所以现在我切换到BouncyCastle:
asymmetricCipherKeyPair keyPair;
PemObject privKey;
System.Security.Cryptography.X509Certificates.PublicKey pk;
asymmetricKeyParameter akp;
using (var reader = File.OpenText(@"C:\PathTo\private_key.pem"))
{
var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(reader,new PasswordFinder("myPassForPrivPem"));
//var read = pemReader.Readobject();
var pemObject = pemReader.ReadPemObject();
akp = PublicKeyFactory.CreateKey(pemObject.Content); // this call currently causes System.ArgumentException illegal object in GestInstance
}
var decryptEngine = new Org.BouncyCastle.Crypto.Encodings.Pkcs1Encoding(new Org.BouncyCastle.Crypto.Engines.RSAEngine());
decryptEngine.Init(false,akp);
var encryptedBytes = File.ReadAllBytes(EncryptedFilePath);
var decrypted = decryptEngine.ProcessBlock(encryptedBytes,encryptedBytes.Length);
File.WriteallBytes(OutputFilePath,decrypted);
在读取PEM文件并正确转换或将正确的参数类型传递给解密函数后,我陷入了困境。
对我来说,似乎成功读取了带有相应密码的PEM文件。但是如何将PemObject
转换为asymmetricCipherKeyPair
或asymmetricKeyParameter
?
如果我使用Readobject()
而不是ReadPemObject()
,则会得到PemException InvalidCipherTextException
:填充块已损坏。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)