RSA加密解密

RSA加密使用公鑰加密,使用私鑰解密,RSA可以自己隨機生成一組公鑰和私鑰

RSA隨機生成一組公鑰和祕鑰:

        /// <summary>
        /// 隨機生成公鑰和祕鑰
        /// 沒創建一個RSACryptoServiceProvider對象,能生成一組隨機的祕鑰,對象相同不管執行多少次方法都是生成的同一組祕鑰
        /// </summary>
        /// <param name="str_Public_Key">公鑰</param>
        /// <param name="str_Private_Key">私鑰</param>
        public static void RSA_CreteKey(out string str_Public_Key, out string str_Private_Key)
        {
            str_Public_Key = "";
            str_Private_Key = "";
            UnicodeEncoding ByteConverter = new UnicodeEncoding();
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
            str_Public_Key = Convert.ToBase64String(RSA.ExportCspBlob(false));
            str_Private_Key = Convert.ToBase64String(RSA.ExportCspBlob(true));
        } 

RSA加密:

         /// <summary>
        /// RSA加密
        /// </summary>
        /// <param name="str_Plain_Text">要加密的字符串</param>
        /// <param name="str_Public_Key">公鑰</param>
        /// <returns></returns>
        public static string RSA_Encrypt(string str_Plain_Text, string str_Public_Key)
        {
            UnicodeEncoding ByteConverter = new UnicodeEncoding();
            byte[] DataToEncrypt = ByteConverter.GetBytes(str_Plain_Text);
            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                byte[] bytes_Public_Key = Convert.FromBase64String(str_Public_Key);
                RSA.ImportCspBlob(bytes_Public_Key);
                byte[] bytes_Cypher_Text = RSA.Encrypt(DataToEncrypt, false);

                string str_Cypher_Text = Convert.ToBase64String(bytes_Cypher_Text);
                return str_Cypher_Text;
            }
            catch (CryptographicException e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        } 

RSA解密:

        /// <summary>
        /// RSA解密
        /// </summary>
        /// <param name="str_Cypher_Text">要解密的字符串</param>
        /// <param name="str_Private_Key">私鑰</param>
        /// <returns></returns>
        static public string RSA_Decrypt(string str_Cypher_Text, string str_Private_Key)
        {
            byte[] DataToDecrypt = Convert.FromBase64String(str_Cypher_Text);
            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                byte[] bytes_Private_Key = Convert.FromBase64String(str_Private_Key);
                RSA.ImportCspBlob(bytes_Private_Key);

                byte[] bytes_Plain_Text = RSA.Decrypt(DataToDecrypt, false);
                UnicodeEncoding ByteConverter = new UnicodeEncoding();
                string str_Plain_Text = ByteConverter.GetString(bytes_Plain_Text);
                return str_Plain_Text;
            }
            catch (CryptographicException e)
            {
                Console.WriteLine(e.ToString());
                return null;
            }
        } 

方法調用:(公鑰和私鑰是用方法RSA_CreteKey生成的一組)

public void test()
        {
            string str_Public_Key = "BgIAAACkAABSU0ExAAQAAAEAAQDl5r3hz79HTl0MyPGlt9pIpRWHQfcYv9CZgOhYVBOHD/us0kBNGsXLw7te8YDW7TgIYr6n7OYfDV1IWrT+DQYnddByXA7HjzaxKrsv9bKDVMdRo5hPLb/S28NqTX/srMQnrChGtcmMQW/9MzUbYd4bWVF0AaVbBAMAQ/zUeD1Jyw=="; //公鑰
            string str_Private_Key = "BwIAAACkAABSU0EyAAQAAAEAAQDl5r3hz79HTl0MyPGlt9pIpRWHQfcYv9CZgOhYVBOHD/us0kBNGsXLw7te8YDW7TgIYr6n7OYfDV1IWrT+DQYnddByXA7HjzaxKrsv9bKDVMdRo5hPLb/S28NqTX/srMQnrChGtcmMQW/9MzUbYd4bWVF0AaVbBAMAQ/zUeD1Jy0nv50z1dx3kDpjj1J3a/dUBfMgSawfoGJU1UwrjOsi4u/+0uJX6wKDip1UVP1v10ikEgey0CRB5D4JatXP+Eu29Tsqg/9TaefmRs37544Nod3PJTObxQhlUxJ144PI8KMfiEjdXstPUpqlI4GrQqQOzATifF8gGYazSCcDkuoPbwXP/nknzpBIg3SfYdxxEKQZIuIiqVmhtj6qMPARj/o4FceGzxG4QD72c1vPAudJKCpmqnW+xB8mhwWRKaU8iqtVy6jlL28pRd0N4QYJ7d0ttdoAMgtrNSgU692t3RA+VdW9sUYzoP5VKM4M2xKfGLac1269TytGYwTq2gX3L501/4ibRdXPwq+E/6sNQ2BNFsPzbGZW/FC43/qGXEb4PRaPotYKLO3IzycZ300WR2o/spcc2vrgCoh7D5Phw4/g3gdISTKR3bq8AhCEFjEWWbKGK7jFJHlxEkW9YsVLzp92kXKCEagTB9RLvlFgKc7c7BoD49sep35/qviVsakUHV4i8A65Dqp4ZVofSFJQ3rJrX++K4WxkKAxqmA5VGmcAGTQG0G7Ta2nnrznxNZOuB5JpvfxGStGpvy/XrRTrboFE="; //私鑰

            string dd = MyTest.Encrypt.RSAEncrypt.RSA_Encrypt("15201098632", str_Public_Key);
            string ss = MyTest.Encrypt.RSAEncrypt.RSA_Decrypt(dd, str_Private_Key);
            Console.WriteLine(dd);
            Console.WriteLine(ss);
            Console.ReadLine();
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章