• 基于RSA的加密/解密示例C#代码


    在C#程序中,大家可能比较熟悉的方式是md5加密解密方式,对RSA可能并不是很熟悉, 下面就说一下RSA加密和解密的算法:
    using System;
    using System.Security.Cryptography;
    using System.Text;
    class RSACSPSample
    {
        static void Main()
        {
            try
            {
                string str_Plain_Text = "How are you?How are you?How are you?How are you?=-popopolA";
                Console.WriteLine("明文:" + str_Plain_Text);
                Console.WriteLine("长度:" + str_Plain_Text.Length.ToString());
                Console.WriteLine();
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                string str_Public_Key;
                string str_Private_Key;
                string str_Cypher_Text = RSA_Encrypt(str_Plain_Text, out str_Public_Key,out str_Private_Key);
                Console.WriteLine("密文:" + str_Cypher_Text);
                Console.WriteLine("公钥:" + str_Public_Key);
                Console.WriteLine("私钥:" + str_Private_Key);
                string str_Plain_Text2 = RSA_Decrypt(str_Cypher_Text, str_Private_Key);
                Console.WriteLine("解密:" + str_Plain_Text2);
                Console.WriteLine();
            }
            catch (ArgumentNullException)
            {
                Console.WriteLine("Encryption failed.");
            }
        }
        //RSA加密,随机生成公私钥对并作为出参返回
        static public string RSA_Encrypt(string str_Plain_Text, out string str_Public_Key, out string str_Private_Key)
        {
            str_Public_Key = "";
            str_Private_Key = "";
            UnicodeEncoding ByteConverter = new UnicodeEncoding();
            byte[] DataToEncrypt = ByteConverter.GetBytes(str_Plain_Text);
            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                str_Public_Key = Convert.ToBase64String(RSA.ExportCspBlob(false));
                str_Private_Key = Convert.ToBase64String(RSA.ExportCspBlob(true));
              
                //OAEP padding is only available on Microsoft Windows XP or later. 
                byte[] bytes_Cypher_Text = RSA.Encrypt(DataToEncrypt, false);
                str_Public_Key = Convert.ToBase64String(RSA.ExportCspBlob(false));
                str_Private_Key = Convert.ToBase64String(RSA.ExportCspBlob(true));
                string str_Cypher_Text = Convert.ToBase64String(bytes_Cypher_Text);
                return str_Cypher_Text;
            }
            catch (CryptographicException e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }
        //RSA解密
        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();
                //RSA.ImportParameters(RSAKeyInfo);
                byte[] bytes_Public_Key = Convert.FromBase64String(str_Private_Key);
                RSA.ImportCspBlob(bytes_Public_Key);
               
                //OAEP padding is only available on Microsoft Windows XP or later. 
                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;
            }
        }

    } 

  • 相关阅读:
    BZOJ 1049: [HAOI2006]数字序列
    BZOJ 1048: [HAOI2007]分割矩阵
    BZOJ 1047: [HAOI2007]理想的正方形
    BZOJ 1046: [HAOI2007]上升序列
    BZOJ 1045: [HAOI2008] 糖果传递
    Flink学习(十三) Flink 常见核心概念分析
    Flink学习(十二) Sink到JDBC(可扩展到任何关系型数据库)
    Flink学习(十一) Sink到Elasticsearch
    Flink学习(十) Sink到Redis
    Flink学习(九) Sink到Kafka
  • 原文地址:https://www.cnblogs.com/wolfocme110/p/3864818.html
Copyright © 2020-2023  润新知