【转载】RSA加密解密
using System; using System.Security.Cryptography; using System.Text; /// <summary> /// RSA加密解密 /// </summary> public static class RSAEncrypt { /// <summary> /// generate private key and public key arr[0] for private key arr[1] for public key /// 生成密匙,arr[0]私匙,arr[1]公匙 /// </summary> /// <returns></returns> public static string[] GenerateKeys() { string[] sKeys = new String[2]; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); sKeys[0] = rsa.ToXmlString(true); sKeys[1] = rsa.ToXmlString(false); return sKeys; } /// <summary> /// RSA 加密 /// </summary> /// <param name="sSource" >Source string</param> /// <param name="sPublicKey" >public key</param> /// <returns></returns> public static string EncryptString(string sSource, string sPublicKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); string plaintext = sSource; rsa.FromXmlString(sPublicKey); byte[] cipherbytes; byte[] byteEn = rsa.Encrypt(Encoding.UTF8.GetBytes("a"), false); cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(plaintext), false); StringBuilder sbString = new StringBuilder(); for (int i = 0; i < cipherbytes.Length; i++) { sbString.Append(cipherbytes[i] + ","); } return sbString.ToString(); } /// <summary> /// RSA 解密 /// </summary> /// <param name="sSource">Source string</param> /// <param name="sPrivateKey">Private Key</param> /// <returns></returns> public static string DecryptString(String sSource, string sPrivateKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(sPrivateKey); byte[] byteEn = rsa.Encrypt(Encoding.UTF8.GetBytes("a"), false); string[] sBytes = sSource.Split(','); for (int j = 0; j < sBytes.Length; j++) { if (sBytes[j] != string.Empty) { byteEn[j] = Byte.Parse(sBytes[j]); } } byte[] plaintbytes = rsa.Decrypt(byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } }