/// <summary>
/// RSA加解密 支持中文
/// -=-使用方法-=-
/// 1. 调用 RSAGenerateKey 保存公钥和私钥
/// 2. 加密 RSAEncrypt("", m_public);
/// 3. 解密 RSADecrypt(m_byteArray, m_private);
/// </summary>
public class LoveNeon_RSA
{
/// <summary>
/// 生成RSA私钥 公钥
/// </summary>
/// <param name="privateKey"></param>
/// <param name="publicKey"></param>
public static void RSAGenerateKey(ref string privateKey, ref string publicKey)
{
System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
//ToXmlString(bool) - 创建并返回包含当前 RSA 对象的密钥的 XML 字符串。
//true 表示同时包含 RSA 公钥和私钥;false 表示仅包含公钥。
//获取私钥
privateKey = rsa.ToXmlString(true);
//获取公钥
publicKey = rsa.ToXmlString(false);
}
/// <summary>
/// 用RSA公钥 加密
/// </summary>
/// <param name="_str">需要加密的内容</param>
/// <param name="_publicKey">公钥</param>
/// <returns></returns>
public static byte[] RSAEncrypt(string _str, string _publicKey)
{
System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
rsa.FromXmlString(_publicKey);
//转成byte[]
byte[] byteData = System.Text.Encoding.UTF8.GetBytes(_str);
//获取加密后的数据
byte[] encryptData = rsa.Encrypt(byteData, false);
//不能转成string保存 必须用byte[]数据来解密
/*
//如果非要转成string 请使用以下步骤
//string result = System.Text.Encoding.UTF8.GetString(m_byteArray);
*/
//返回byte[]数据
return encryptData;
}
/// <summary>
/// 用RSA私钥 解密
/// </summary>
/// <param name="data"></param>
/// <param name="privateKey"></param>
/// <returns></returns>
public static string RSADecrypt(byte[] _data,string _privateKey)
{
System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
rsa.FromXmlString(_privateKey);
//获取解密后的数据
byte[] decryptData = rsa.Decrypt(_data, false);
//转成string
string resultStr = System.Text.Encoding.UTF8.GetString(decryptData);
return resultStr;
}
}
08-29
2026
07-19
2038
08-10
2440