zoukankan      html  css  js  c++  java
  • Asp.Net 常用工具类之加密——非对称加密RSA算法(1)

        

     

     

        踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态)。当然喏,并不后悔,代码路还长!!!

     

        On The Way,永不止步!!!

     

        开发过程中也积累了一些自己的经验、代码块和帮助类,有了这些,确实方便了之后的开发流程,同时也缩小了开发周期,详情看图(一小部分),这些都是最近结合开发常见的方法一行行写出来,并且也用到了相关项目,现在看起来还是有点点的小兴奋!

                 

        当然喏,我还是个新人,需要园子里的老人多多指点,尤其是在代码质量和技术方面,您们的指点感激不尽,也是我前进的方向! 

     

    Asp.Net 常用工具类之加密——非对称加密RSA算法

    自用帮助类

    准备分周期进行讲解和分析,望大家共勉!!!

     

    今天咱们就从加解密开始讲起吧,哈哈。

     

    在开发过程中,各种加密方式层出不穷,有对称加密,非对称加密;当然喏,密码也分为可逆,不可逆

     

    在c#中,非对称加密以RSA算法为代表,利用公钥,私钥方式进行加解密。

     

    加密过程中需要针对密钥长度进行设置,保证密钥的长度可行性。密钥长度:512,1024,2048,4096,8192。

     

    RSA加密算法流程如下:

     

    1、首先 【系统】 生成一对密钥,即私钥和公钥

     

    2、然后,【系统】 将公钥发送给 【用户】

     

    3、【用户】用收到的公钥对数据加密,再发送给【系统】

     

    4、【系统】 收到数据后,使用自己的私钥解密,返回密码

     

    由于在非对称算法中,公钥加密的数据必须用对应的私钥才能解密,而私钥又只有接收方自己知道,这样就保证了数据传输的安全性。

     

    理论性比较强,下面通过一个DEMO进行代码的演示:

     

    public static class RSA
    {
    /// <summary>
    /// 生成密钥
    /// <param name="PrivateKey">私钥</param>
    /// <param name="PublicKey">公钥</param>
    /// <param name="KeySize">密钥长度:512,1024,2048,4096,8192</param>
    /// </summary>
    public static void Generator(out string PrivateKey, out string PublicKey, int KeySize = 2048)
    {
      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(KeySize);
      PrivateKey = rsa.ToXmlString(true); //将RSA算法的私钥导出到字符串PrivateKey中 参数为true表示导出私钥 true 表示同时包含 RSA 公钥和私钥;false 表示仅包含公钥。
      PublicKey = rsa.ToXmlString(false); //将RSA算法的公钥导出到字符串PublicKey中 参数为false表示不导出私钥 true 表示同时包含 RSA 公钥和私钥;false 表示仅包含公钥。
    }
    /// <summary>
    /// RSA加密 将公钥导入到RSA对象中,准备加密
    /// </summary>
    /// <param name="PublicKey">公钥</param>
    /// <param name="encryptstring">待加密的字符串</param>
    public static string RSAEncrypt(string PublicKey, string encryptstring)
    {
      byte[] PlainTextBArray;
      byte[] CypherTextBArray;
      string Result;
      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
      rsa.FromXmlString(PublicKey);
      PlainTextBArray = (new UnicodeEncoding()).GetBytes(encryptstring);
      CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
      Result = Convert.ToBase64String(CypherTextBArray);
      return Result;
    }
    /// <summary>
    /// RSA解密 将私钥导入RSA中,准备解密
    /// </summary>
    /// <param name="PrivateKey">私钥</param>
    /// <param name="decryptstring">待解密的字符串</param>
    public static string RSADecrypt(string PrivateKey, string decryptstring)
    {
      byte[] PlainTextBArray;
      byte[] DypherTextBArray;
      string Result;
      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
      rsa.FromXmlString(PrivateKey);
      PlainTextBArray = Convert.FromBase64String(decryptstring);
      DypherTextBArray = rsa.Decrypt(PlainTextBArray, false);
      Result = (new UnicodeEncoding()).GetString(DypherTextBArray);
      return Result;
    }
    }
    调用方式:
    static void Main(string[] args)
    {
      string PrivateKey = "";
      string PublicKey = "";
      RSA.Generator(out PrivateKey, out PublicKey, 1024);
      var aaa = RSA.RSAEncrypt(PublicKey, "123456789");
      var bbb = RSA.RSADecrypt(PrivateKey, aaa);
    }

    OK,各位看官,这一期的文章非对称加密写到这里喏,感谢大家的支持,您的支持是我的动力!

    下一期给大家带来的是常用的对称加密几种方式,敬请期待!!!

     

    个人头条号: http://www.toutiao.com/c/user/3213034222/#mid=4129397771

     

  • 相关阅读:
    C语言常用函数
    信号处理函数误用不可重入函数导致的进程死锁情况
    Shell脚本学习
    文件I/O详解
    字体标记的使用
    无序列表标记
    换行标记的使用
    HTML文件的基本结构
    预格式化标记的使用
    特殊标记的使用
  • 原文地址:https://www.cnblogs.com/heimalang/p/6496856.html
Copyright © 2011-2022 走看看