c#上的证书加密/解密错误

本文关键字:解密 错误 加密 证书 | 更新日期: 2023-09-27 18:01:27

下面的命令用于创建一个名为myalias的密钥存储库。并导出名为"myalias2.cer"的证书。

Java Keytool是一个密钥和证书管理实用程序。它允许用户管理自己的公钥/私钥对和证书。

E:'>keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 36000 -alias myalias2 -keystore myalias.p12 -storetype pkcs12 -dname "cn=www.myalias.com, ou=myalias2, o=myalias2, l=tp, st=tp, c=tw" -storepass 123456 -keypass 123456
E:'>keytool -export -alias myalias2 -keystore myalias.p12 -storetype pkcs12 -rfc -file myalias2.cer -storepass 123456
加密:

string input="hello";            
X509Certificate2 myCertificate = GetCertFromCerFile("e:''myalias2.cer");
RSACryptoServiceProvider provider1 = (RSACryptoServiceProvider)myCertificate.PublicKey.Key;
byte[] buffer1 = Encoding.UTF8.GetBytes(input);
byte[] result = provider1.Encrypt(buffer1, false);
string data= Convert.ToBase64String(result); 

解密:

44.  RSACryptoServiceProvider provider2 = (RSACryptoServiceProvider)myCertificate.PrivateKey;
45.  byte[] buffer2 = Convert.FromBase64String(data);
46.  byte[] result2 = provider2.Decrypt(buffer2, false); // <-- error here
47.  String decryptedMessage = Encoding.UTF8.GetString(result2);

可以正常执行加密操作。但是,我在第46行发现了一些错误(执行解密):

类型的第一次机会异常的系统。得到NullReferenceException"发生在CertTest.exe线程" (0xcc8)已退出代码为0 (0x0)。在CertTest.Program。解密(字符串数据)在D: ' vsworkspace ' cert ' cert ' Program.cs:行46在CertTest.Program。Main (String [] args)在D: ' vsworkspace ' cert ' cert ' Program.cs:行29日

有谁知道吗?因为我不知道如何解决这个问题。非常感谢!

c#上的证书加密/解密错误

你得到的NullReferenceException是因为PrivateKey是空的。这是因为.cer文件只包含一个. x509证书,该证书只包含公钥。

在这种情况下,这意味着您只能使用证书加密数据。为了解密它,你需要私钥。

您可以使用。p12(或。pfx)文件访问私钥。这个pkcs# 12文件(通常)包括私钥(密码保护)和证书。

有几个X509Certificate[2]构造函数将接受密码并自动解密私钥。一旦从。p12文件加载,您的代码将收到一个有效的(非空的)RSACryptoServiceProvider实例,您将能够解密数据。

顺便说一句,你不应该用RSA加密字符串(或数据):-)欲了解更多详情,请参阅http://pages.infinit.net/ctech/20031101-0151.html