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();
}