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

     

  • 相关阅读:
    无线鼠标换电池了
    Jython Interactive Servlet Console YOU WILL NEVER KNOW IT EXECLLENT!!! GOOD
    Accessing Jython from Java Without Using jythonc
    jython podcast cool isnt't it?
    Python里pycurl使用记录
    Creating an Interactive JRuby Console for the Eclipse Environment
    微软为AJAX和jQuery类库提供CDN服务
    Download A File Using Cygwin and cURL
    What is JMRI?这个是做什么用的,我真没看懂但看着又很强大
    用curl 发送指定的大cookie的http/https request
  • 原文地址:https://www.cnblogs.com/heimalang/p/6496856.html
Copyright © 2011-2022 走看看