您的位置:首页 > 编程语言 > C#

C# RSA

2013-11-18 14:54 162 查看
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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: