使用PrivateKey X.509证书解密

我有一个问题是解密消息usgin X.509证书。

我使用以下选项生成带有makecert的证书:

makecert -r -pe -n "CN=MyCertificate" -ss CA -sr CurrentUser -a sha1 -sky signature -cy authority -sv CA.pvk CA.cer 

PrivateKey是“mypassword”。

我的问题是当我想解密用c#中的先前证书加密的消息时。

我发现这个类http://blog.shutupandcode.net/?p=660 ,但是在X509Decrypt方法中,PrivateKey一直是null。

 public static byte [] X509Decrypt(byte [] data,string certificateFile,string password)
 {
     //加载证书并解密指定的数据
    使用(var ss = new System.Security.SecureString())
     {
         foreach(密码中的var keyChar.ToCharArray())
             ss.AppendChar(keyChar);

         //加载受密码保护的证书文件
         X509Certificate2 cert = new X509Certificate2(certificateFile,ss);

        使用(RSACryptoServiceProvider rsa =(RSACryptoServiceProvider)cert.PrivateKey)
         {
             return rsa.Decrypt(data,true);
         }    
     }
 }

我试过传递证书文件(.cer)

 X509DecryptString(token,@“c:\ CA.cer”,“mypassword”);

并传递pvk文件(.pvk)

 X509DecryptString(token,@“c:\ CA.pvk”,“mypassword”);

但总而言之,PrivateKey属性为null。

任何人都可以指导我使用pvk文件解密消息吗?

谢谢,

何塞

证书本身仅包含公钥(+某些数据),但不包含私钥。 (RSA私钥不太可能是“mypassword”。保护私钥的密码可能是“mypassword”,但私钥本身(更具体地说是RSA中的私有密码)将是一个相当长的密码。)

因此(因为CA.cer只包含证书), X509DecryptString(token, @"c:\CA.cer", "mypassword")几乎肯定不起作用。

X509DecryptString(token, @"c:\CA.pvk", "mypassword"); 原则上可以工作,但是你要从中创建一个X509Certificate2对象,它仍然需要证书和私钥。 您应该能够从PKCS#12容器(.p12 / .pfx)加载它。

要创建此容器,可以使用pvk2pfx

 pvk2pfx -spc CA.cer -pvk CA.pvk -pfx CA.pfx 

(如果未指定-pfx CA.pfx ,它将启动交互式界面,在这种情况下,您需要勾选该框以导出私钥。)

然后,尝试使用该pfx / p12文件进行解密。

我认为您应该使用“-sky exchange”来生成公钥/私钥对。