我有一个现有的asp.net应用程序,其中我使用X509Certificate2私钥和公钥。我正在将它迁移到netcoreapp2.1 (MVC)。在使用X509Certificate2创建公钥时,我面临着一个问题。我有下面的代码
public string CertificatePublicKeyEncrypt(string stringToEncrypt, string certficatePath)
{
byte[] bytesToEncrypt = ASCIIEncoding.ASCII.GetBytes(stringToEncrypt);
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
X509Certificate2 cert = new X509Certificate2(certficatePath);
RSACryptoServiceProvider rsa = cert.PublicKey.Key as RSACryptoServiceProvider;
byte[] encryptedData = rsa.Encrypt(bytesToEncrypt, false);
return Convert.ToBase64String(encryptedData);
}在asp.net应用程序中,cert.Handle值为"0x0792e4a0“,并在使用Server.MapPath函数确定证书位置的情况下成功地创建了rsa,如下所示:
req.Sender = helper.CreateSenderObj(txt_sender_id.Text, txt_sender_name.Text, txt_efinance_password.Text, Server.MapPath("~/Certificates/InternetPaymentCrt.cer"));asp.net项目中的处理值,但在我们的MVC项目中,cert.Handle值为“0x0000019d814fffa0”,然后rsa为空,其中证书位置是使用Hosting.ContentRootPath函数确定的,如下所示:
var path = $"{Hosting.ContentRootPath}\\Certificates\\InternetPaymentCrt.cer";
req.Sender = helper.CreateSenderObj(VM.SenderId, VM.SenderName, VM.SenderPassword,path); MCV项目中的处理值并给出空异常错误,如下所示:System.NullReferenceException
发布于 2022-08-04 20:00:42
在.NET核心应用程序中,X509Certificate2.PublicKey和X509Certificate2.PrivateKey实际上已经过时了。您必须使用X509Certificate2扩展方法 (取决于密钥算法的相应方法)来检索公钥和私钥。
https://stackoverflow.com/questions/73240387
复制相似问题