zoukankan      html  css  js  c++  java
  • .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=密钥长度

  • 相关阅读:
    虚拟机centOs和主机ssh互连
    centos7 利用yum安装mysql8.0
    MySQL触发器trigger的使用
    VMware虚拟机优化
    VM tools的安装
    CentOS下tar包和rpm包的区别
    如何解决VMware-vmx.exe无法彻底删除的问题
    JVM结构及堆的划分
    MYSQL: set names utf8是什么意思?
    collate utf8_bin和uft-8_general_ci是什么意思?
  • 原文地址:https://www.cnblogs.com/guoyan/p/4877760.html
Copyright © 2011-2022 走看看