纳金网

标题: RSA加密的实现 [打印本页]

作者: 烟雨    时间: 2016-4-27 05:06
标题: RSA加密的实现
最近做的App要加密,用RSA,说实话,第一次接触,完全不懂什么公钥啊私钥的东东。网上查了点儿资料,最后还是实现了最终的结果。
  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;

  4. namespace LLL
  5. {
  6.     public class LRSA
  7.     {
  8.         /// <summary>
  9.         /// 生成公钥和私钥
  10.         /// </summary>
  11.         /// <returns></returns>
  12.         public static string[] GenerateKeys()
  13.         {
  14.             string[] sKeys = new string[2];
  15.             RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  16.             sKeys[0] = rsa.ToXmlString(true);//私钥
  17.             sKeys[1] = rsa.ToXmlString(false);//公钥

  18.             return sKeys;
  19.         }
  20.         private static string privatekey= "<RSAKeyValue><Modulus>xWG0u5W1onPT3DV4VSZtiZ3OkZhdGXDytYPmex8Ki" +
  21.                         "sWrqQF/n3a68/NUrn7pO7ma7pf0rkSQfyUOdv7ng61DIsuid72iEkop9T8lJ53eqqKVG5xlL6YpNBsI8XUz9EvX2stz/cv8" +
  22.                         "vj20Ne/D9Kny4Lcfe+iSP460vivULLmIVR0=</Modulus><Exponent>EQ==</Exponent><P>zbhWmKlhtYLALUrMCEZda2kLzaNHHuyeP3k9OX" +
  23.                         "wBLv6jg1gvp5EmhLBoztNIgUf9SyemPDXVv6kyrJj9g29QPw==</P><Q>9Z+kt67joySKMVH81L3IukhGcLXjN/2WD2FBZu91GVUP2Vl/QLmo0vYpl6v2ZH" +
  24.                         "6tT707bzSZlEl74TcaBmiDow==</Q><DP>PIGC4Zs62whWo+jSmQWjAXk/tPPJn68BXfZ7a0KW77RONbCGfJQaY0Lxpj4kYkJZjpMw5IhN7ROlfg7hJqhExw==</DP>" +
  25.                         "<DQ>VrDQuUzI0CsDmO/CpXAoujegZAP114atbtcIBjZlkHhf8lvSj1CV8BqlRJcLqv+Idn8F6wOBf6F3BDGQtve1/Q==</DQ><InverseQ>mfByw9n3MkppRGDCMULrCmM" +
  26.                         "PUhCBOFb03X1yvbmfUE2x8bRWI4FLV4ZUGOVneTX8TRfIzr8/Z0LTrFCYpnveBA==</InverseQ><D>LnFXs6rBU2aMM9BYjIGDL3Bs1vasfnTt0FtFSiVr5Gq++pbw2" +
  27.                         "joN3wwT7NKROzq7CvaT7MTWtIEwlHg2eVXxrWtc0fuY5O2IKDTUywAzane9IFJdLmz/w7eSdV8+O8SXkM7ETswp3dvG+U15lC4ohTPRjbQJXivxbRYfFAs4luE=</D></RSAKeyValue>";

  28.         private static string publickey = "<RSAKeyValue><Modulus>xWG0u5W1onPT3DV4VSZtiZ3OkZhdGXDy" +
  29.                          "tYPmex8KisWrqQF/n3a68/NUrn7pO7ma7pf0rkSQfyUOdv7ng61DIsuid72iEkop" +
  30.                          "9T8lJ53eqqKVG5xlL6YpNBsI8XUz9EvX2stz/cv8vj20Ne/D9Kny4Lcfe+iSP460vivULLmIVR0=</Modulus><Exponent>EQ==</Exponent></RSAKeyValue>";
  31.         /// <summary>
  32.         /// 公钥加密
  33.         /// </summary>
  34.         /// <param name="source">加密原文</param>
  35.         /// <returns>授权码</returns>
  36.         public static string RSAEncrypt(string source)
  37.         {
  38.             RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  39.             byte[] cipherBytes;
  40.             rsa.FromXmlString(publickey);
  41.             cipherBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), false);

  42.             return Convert.ToBase64String(cipherBytes);
  43.         }

  44.         /// <summary>
  45.         /// 私钥解密
  46.         /// </summary>
  47.         /// <param name="enContent">待解密密文</param>
  48.         /// <returns></returns>
  49.         public static string RSADecrypt(string enContent)
  50.         {
  51.             RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  52.             byte[] cipherBytes;
  53.             rsa.FromXmlString(privatekey);
  54.             try
  55.             {
  56.                 cipherBytes = rsa.Decrypt(Convert.FromBase64String(enContent), false);
  57.                 return Encoding.UTF8.GetString(cipherBytes);
  58.             }
  59.             catch (Exception)
  60.             {
  61.                 return String.Empty;
  62.             }
  63.         }
  64.     }
  65. }
复制代码
然后再用其他代码调用。先用GenerateKeys()生成一个公钥,一个私钥,然后直接加密原文RSAEncrypt(string source),解密密文RSADecrypt(string enContent)就ok了





欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5