1. using System;  
  2. using System.Security.Cryptography;  
  3. using System.IO;  
  4. using System.Text;  
  5.  
  6. //1、将字符串转换成字节数组  
  7. //2、选择加密方式  
  8.  
  9.  
  10. //3、不可逆加密:MD5、SHA1  
  11. //4、可逆加密:DES、RC2、Rijndael  
  12. //5、对密钥要求长度不同  
  13. //6、加密速度不同、复杂程度不同、安全性不同  
  14.  
  15.  
  16. public class Class10  
  17. {  
  18.     public Class10()  
  19.     {  
  20.         CallMyDES();  
  21.     }  
  22.  
  23.     void CallMyDES()  
  24.     {  
  25.         Byte[] key = { 12, 23, 34, 45, 56, 67, 78, 89 };  
  26.         Byte[] iv = { 120, 230, 10, 1, 10, 20, 30, 40 };  
  27.  
  28.         //1、调用MD5、SHA1加密  
  29.         bool result = MyMD5Crypto("123456");  
  30.  
  31.         //2、调用DES加密、解密  
  32.         string a = MyDESCrypto("123456", key, iv);  
  33.         string b = MyDESCryptoDe(a, key, iv);  
  34.  
  35.         //3、调用DES对文件加密、解密  
  36.         MyDESCryptoFile("123456", key, iv);  
  37.         string str = MyDESCryptoFileDe(key, iv);  
  38.  
  39.         //4、调用TripleDES加密、解密  
  40.         string a1 = TripleDESCrypto("中国""8i9o0p-[=]'/;.l,");//天津香港澳门台湾  
  41.         string b1 = TripleDESCryptoDe(a1, "8i9o0p-[=]'/;.l,");  
  42.  
  43.         //5、调用自定义加密、解密  
  44.         MyCrypto();  
  45.  
  46.  
  47.         ////rsa比 dea慢,但比dsa安全  
  48.  
  49.         //DSA dsa = DSA.Create();  
  50.         //RSA rea = RSA.Create();  
  51.  
  52.         ////64  
  53.         //DES des = DES.Create();  
  54.  
  55.         //TripleDES tDes = TripleDES.Create();  
  56.  
  57.         //RC2 rc2 = RC2.Create();  
  58.         ////或  
  59.         //RC2 rc21 = (RC2)SymmetricAlgorithm.Create("RC2");  
  60.  
  61.         //Rijndael rjd = Rijndael.Create();  
  62.  
  63.         //MD5 md5 = MD5.Create();  
  64.  
  65.         //SHA1 sha1 = SHA1.Create();  
  66.     }  
  67.  
  68.  
  69.     //1、MD5、SHA1加密(可用于加密后的数据以后不再显示,如加密用户密码)  
  70.     bool MyMD5Crypto(string userPassword)//"123456";  
  71.     {  
  72.         bool result = false;  
  73.         //单向加密  
  74.         //1、MD5           
  75.         string dbPassword = "E10ADC3949BA59ABBE56E057F20F883E";  
  76.         string md5Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(userPassword, "MD5");  
  77.         if (md5Password == dbPassword)  
  78.         {  
  79.             result = true;  
  80.         }  
  81.  
  82.         //2、SHA1  
  83.         string sha1Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(userPassword, "SHA1");  
  84.         //"7C4A8D09CA3762AF61E59520943DC26494F8941B"  
  85.  
  86.         return result;  
  87.     }  
  88.  
  89.     //2、DES对字符串加密、解密  
  90.     string MyDESCrypto(string str, byte[] keys, byte[] ivs)  
  91.     {  
  92.         //加密  
  93.         byte[] strs = Encoding.Unicode.GetBytes(str);  
  94.  
  95.  
  96.         DESCryptoServiceProvider desc = new DESCryptoServiceProvider();  
  97.         MemoryStream mStream = new MemoryStream();  
  98.  
  99.         ICryptoTransform transform = desc.CreateEncryptor(keys, ivs);//加密对象  
  100.         CryptoStream cStream = new CryptoStream(mStream, transform, CryptoStreamMode.Write);  
  101.         cStream.Write(strs, 0, strs.Length);  
  102.         cStream.FlushFinalBlock();  
  103.         return Convert.ToBase64String(mStream.ToArray());  
  104.     }  
  105.     string MyDESCryptoDe(string str, byte[] keys, byte[] ivs)  
  106.     {  
  107.         //解密  
  108.         byte[] strs = Convert.FromBase64String(str);  
  109.  
  110.         DESCryptoServiceProvider desc = new DESCryptoServiceProvider();  
  111.         MemoryStream mStream = new MemoryStream();  
  112.  
  113.         ICryptoTransform transform = desc.CreateDecryptor(keys, ivs);//解密对象  
  114.  
  115.         CryptoStream cStream = new CryptoStream(mStream, transform, CryptoStreamMode.Write);  
  116.         cStream.Write(strs, 0, strs.Length);  
  117.         cStream.FlushFinalBlock();  
  118.         return Encoding.Unicode.GetString(mStream.ToArray());  
  119.     }  
  120.  
  121.     //3、DSA对文件加密、解密  
  122.     void MyDESCryptoFile(string str, Byte[] key, Byte[] iv)  
  123.     {  
  124.         Byte[] inputStr = Encoding.Unicode.GetBytes(str);  
  125.         //  
  126.         DESCryptoServiceProvider provider = new DESCryptoServiceProvider();  
  127.         ICryptoTransform transform = provider.CreateEncryptor(key, iv);//加密对象  
  128.  
  129.         FileStream fStream = new FileStream(@"D:\a.txt", FileMode.Create, FileAccess.Write);  
  130.         CryptoStream cStream = new CryptoStream(fStream, transform, CryptoStreamMode.Write);  
  131.         cStream.Write(inputStr, 0, inputStr.Length);  
  132.         cStream.Close();  
  133.     }  
  134.     string MyDESCryptoFileDe(Byte[] key, Byte[] iv)  
  135.     {  
  136.         DESCryptoServiceProvider provider = new DESCryptoServiceProvider();  
  137.         ICryptoTransform transform = provider.CreateDecryptor(key, iv);//解密对象  
  138.  
  139.         FileStream fStream = new FileStream(@"D:\a.txt", FileMode.Open, FileAccess.Read);  
  140.         CryptoStream cStream = new CryptoStream(fStream, transform, CryptoStreamMode.Read);  
  141.  
  142.         StreamReader reader = new StreamReader(cStream, new UnicodeEncoding());  
  143.         string str = reader.ReadToEnd();  
  144.         cStream.Close();  
  145.         return str;  
  146.     }  
  147.  
  148.     //4、TripleDES加密、解密  
  149.     string TripleDESCrypto(string str, string key)  
  150.     {  
  151.         byte[] data = UnicodeEncoding.Unicode.GetBytes(str);//如果加密中文,不能用ASCII码  
  152.         byte[] keys = ASCIIEncoding.ASCII.GetBytes(key);  
  153.  
  154.         TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();  
  155.         des.Key = keys;//key的长度必须为16位或24位,否则报错“指定键的大小对于此算法无效。”,des.Key不支持中文  
  156.         des.Mode = CipherMode.ECB;//设置运算模式  
  157.         ICryptoTransform cryp = des.CreateEncryptor();//加密  
  158.  
  159.         return Convert.ToBase64String(cryp.TransformFinalBlock(data, 0, data.Length));  
  160.     }  
  161.     string TripleDESCryptoDe(string str, string key)  
  162.     {  
  163.         byte[] data = Convert.FromBase64String(str);  
  164.         byte[] keys = ASCIIEncoding.ASCII.GetBytes(key);  
  165.  
  166.         TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();  
  167.         des.Key = keys;  
  168.         des.Mode = CipherMode.ECB;//设置运算模式  
  169.         des.Padding = PaddingMode.PKCS7;  
  170.         ICryptoTransform cryp = des.CreateDecryptor();//解密  
  171.  
  172.         return UnicodeEncoding.Unicode.GetString(cryp.TransformFinalBlock(data, 0, data.Length));  
  173.     }  
  174.  
  175.     //5、自定义加密、解密  
  176.     void MyCrypto()  
  177.     {  
  178.         string a = "123456中国";  
  179.         string b = "";  
  180.         //加密  
  181.         for (int i = 0; i < a.Length; i++)  
  182.         {  
  183.             b += (char)(a[i] + 10 - 2 * 3);  
  184.         }  
  185.  
  186.         //解密  
  187.         string c = "";  
  188.         for (int i = 0; i < a.Length; i++)  
  189.         {  
  190.             c += (char)(b[i] - 10 + 2 * 3);  
  191.         }  
  192.  
  193.     }  
  194. }  
  195.  
  196.