加密:
/// <summary>
/// RSA加密,用公钥进行加密
/// </summary>
/// <param name="xmlPublicKey">公钥</param>
/// <param name="m_strEncryptString">MD5加密后的数据</param>
/// <returns>RSA公钥加密后的数据</returns>
public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString)
{
string str2;
try
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
//FromXmlString( )通过 XML 字符串中的密钥信息(即参数)初始化 RSA 对象。即:将公钥或私钥导入到RSA对象。
provider.FromXmlString(xmlPublicKey);
//Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符, 比如汉字"经"的编码是0x7ECF
//UnicodeEncoding().GetBytes()将一组字符编码为一个字节序列
byte[] bytes = new UnicodeEncoding().GetBytes(m_strEncryptString);
//ToBase64String(Byte []) 将 8 位无符号整数的数组转换为其用 Base64 数字编码的等效字符串表示形式。
//Encrypt()方法是使用 RSA 算法对数据进行加密。它有两个参数,第一个参数为要加密的对象,类型为字节序列
//第二个参加,如果为 true,则使用 OAEP 填充,如果为false,则使用PKCS#1 1.5 版填充。
str2 = Convert.ToBase64String(provider.Encrypt(bytes, false));
}
catch (Exception exception)
{
throw exception;
}
return str2;
}
解密:
/// <summary>
/// RSA解密,利用私钥进行解密
/// </summary>
/// <param name="xmlPrivateKey">私钥</param>
/// <param name="m_strDecryptString">待解密的数据</param>
/// <returns>解密后的结果</returns>
public string RSADecrypt(string xmlPrivateKey, string m_strDecryptString)
{
string str2;
try
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(xmlPrivateKey);
//FromBase64String( ) 将 Base64 数字编码的等效字符串轮换为字节序列。
byte[] rgb = Convert.FromBase64String(m_strDecryptString);
//Decrypt()方法是使用 RSA 算法对数据进行解密。
byte[] buffer2 = provider.Decrypt(rgb, false);
str2 = new UnicodeEncoding().GetString(buffer2);
}
catch (Exception exception)
{
throw exception;
}
return str2;
}