.net证书Rsa加密

参考:基于RSA算法的ios客户端加密和C#服务端解密的解决方案  

       NET和java的RSA互通,仅此而已

 1.生成证书

  打开vs开发人员工具使用如下命令生成证书:

  makecert -ss My -n CN=Theoservice -sky exchange -pe

  Makecert命令的详细说明请参看微软Makecert.exe工具的文档:https://msdn.microsoft.com/zh-cn/library/bfsktky3(v=vs.110).aspx

  然后,开始->运行->MMC,打开MMC控制台。文件->添加/删除管理单元->添加按钮->选”证书”->添加->选”计算机账户”->关闭->确定,然后你就可以在 “个人->证书” 里看到刚才生成的证书了。

  你可以导出一份不带私钥的cer格式的证书。这张证书只含有公钥,是用来和客户端一起发布出去用来加密数数据的。

2.获取:RSACryptoServiceProvider

 1             X509Store store = new X509Store(StoreLocation.CurrentUser);
 2             store.Open(OpenFlags.ReadOnly);
 3             X509Certificate2Collection certCollection = store.Certificates;
 4             X509Certificate2 cert = null;
 5 
 6             // Loop through each certificate and find the certificate 
 7             // with the appropriate name.
 8             foreach (X509Certificate2 c in certCollection)
 9             {
10                 if (c.Subject == "CN=Theoservice")
11                 {
12                     cert = c;
13 
14                     break;
15                 }
16             }
17             store.Close();
18 
19             //从证书中获得含私钥的RSACryptoServiceProvider
20 
21             RSACryptoServiceProvider provider = (RSACryptoServiceProvider)cert.PrivateKey;
22             byte[] buff=Encoding.UTF8.GetBytes(source);
23             /* 
24              * 一次加密长度为 (KeySize/8)个byte。
25              * 而C#默认采用#PKSC1的padding模式,每次最多可以加密 (KeySize/8-11) 个byte。
26              * RSA分组加密算法每次从明文里取<=(KeySize/8-11)个byte,然后加密成(KeySize/8)个byte的密文;
27              * 解密的时候,每次就取(KeySize/8)个byte的密文,将其解密成<=(KeySize/8-11)个byte的明文。
28              * 因为#PKSC1的padding模式每次padding的内容是随机的,所以即使是加密同一段明文,每次的结果也不一样,这大大的增加了数据安全性。
29              */
30             //加密
31             provider.Encrypt(buff, false);
32             //解密
33             provider.Decrypt(buff, false);

注:1. 每次加密最大(KeySize/8-11)个byte,解密KeySize/8)个byte

      2.加密后固定(KeySize/8)个byte

      3.KeySize=密钥长度

posted @ 2015-10-14 16:12  2GyAn  阅读(1015)  评论(0编辑  收藏  举报