C#加密算法汇总

 1 方法一:

 2     //须添加对System.Web的引用 

 3     using System.Web.Security; 

 4      

 5     ... 

 6      

 7     /// <summary> 

 8     /// SHA1加密字符串 

 9     /// </summary> 

10     /// <param name="source">源字符串</param> 

11     /// <returns>加密后的字符串</returns> 

12     public string SHA1(string source) 

13     { 

14         return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "SHA1"); 

15     } 

16  

17  

18     /// <summary> 

19     /// MD5加密字符串 

20     /// </summary> 

21     /// <param name="source">源字符串</param> 

22     /// <returns>加密后的字符串</returns> 

23     public string MD5(string source) 

24     { 

25         return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "MD5");; 

26     }
 1 方法二(可逆加密解密):

 2     using System.Security.Cryptography; 

 3      

 4     ... 

 5      

 6     public string Encode(string data) 

 7     { 

 8         byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); 

 9         byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); 

10      

11         DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 

12         int i = cryptoProvider.KeySize; 

13         MemoryStream ms = new MemoryStream(); 

14         CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); 

15      

16         StreamWriter sw = new StreamWriter(cst); 

17         sw.Write(data); 

18         sw.Flush(); 

19         cst.FlushFinalBlock(); 

20         sw.Flush(); 

21         return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); 

22      

23     } 

24      

25     public string Decode(string data) 

26     { 

27         byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); 

28         byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); 

29      

30         byte[] byEnc; 

31         try

32         { 

33             byEnc = Convert.FromBase64String(data); 

34         } 

35         catch

36         { 

37             return null; 

38         } 

39      

40         DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 

41         MemoryStream ms = new MemoryStream(byEnc); 

42         CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); 

43         StreamReader sr = new StreamReader(cst); 

44         return sr.ReadToEnd(); 

45     }
 1 方法三(MD5不可逆):

 2     using System.Security.Cryptography; 

 3      

 4     ... 

 5      

 6     //MD5不可逆加密 

 7      

 8     //32位加密 

 9      

10     public string GetMD5_32(string s, string _input_charset) 

11     { 

12         MD5 md5 = new MD5CryptoServiceProvider(); 

13         byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s)); 

14         StringBuilder sb = new StringBuilder(32); 

15         for (int i = 0; i < t.Length; i++) 

16         { 

17             sb.Append(t[i].ToString("x").PadLeft(2, '0')); 

18         } 

19         return sb.ToString(); 

20     } 

21      

22     //16位加密 

23     public static string GetMd5_16(string ConvertString) 

24     { 

25         MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 

26         string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8); 

27         t2 = t2.Replace("-", ""); 

28         return t2; 

29     }
 1 方法四(对称加密):

 2     using System.IO; 

 3     using System.Security.Cryptography; 

 4      

 5     ... 

 6      

 7     private SymmetricAlgorithm mobjCryptoService; 

 8     private string Key; 

 9     /// <summary>    

10     /// 对称加密类的构造函数    

11     /// </summary>    

12     public SymmetricMethod() 

13     { 

14         mobjCryptoService = new RijndaelManaged(); 

15         Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7"; 

16     } 

17     /// <summary>    

18     /// 获得密钥    

19     /// </summary>    

20     /// <returns>密钥</returns>    

21     private byte[] GetLegalKey() 

22     { 

23         string sTemp = Key; 

24         mobjCryptoService.GenerateKey(); 

25         byte[] bytTemp = mobjCryptoService.Key; 

26         int KeyLength = bytTemp.Length; 

27         if (sTemp.Length > KeyLength) 

28             sTemp = sTemp.Substring(0, KeyLength); 

29         else if (sTemp.Length < KeyLength) 

30             sTemp = sTemp.PadRight(KeyLength, ' '); 

31         return ASCIIEncoding.ASCII.GetBytes(sTemp); 

32     } 

33     /// <summary>    

34     /// 获得初始向量IV    

35     /// </summary>    

36     /// <returns>初试向量IV</returns>    

37     private byte[] GetLegalIV() 

38     { 

39         string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; 

40         mobjCryptoService.GenerateIV(); 

41         byte[] bytTemp = mobjCryptoService.IV; 

42         int IVLength = bytTemp.Length; 

43         if (sTemp.Length > IVLength) 

44             sTemp = sTemp.Substring(0, IVLength); 

45         else if (sTemp.Length < IVLength) 

46             sTemp = sTemp.PadRight(IVLength, ' '); 

47         return ASCIIEncoding.ASCII.GetBytes(sTemp); 

48     } 

49     /// <summary>    

50     /// 加密方法    

51     /// </summary>    

52     /// <param name="Source">待加密的串</param>    

53     /// <returns>经过加密的串</returns>    

54     public string Encrypto(string Source) 

55     { 

56         byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source); 

57         MemoryStream ms = new MemoryStream(); 

58         mobjCryptoService.Key = GetLegalKey(); 

59         mobjCryptoService.IV = GetLegalIV(); 

60         ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor(); 

61         CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); 

62         cs.Write(bytIn, 0, bytIn.Length); 

63         cs.FlushFinalBlock(); 

64         ms.Close(); 

65         byte[] bytOut = ms.ToArray(); 

66         return Convert.ToBase64String(bytOut); 

67     } 

68     /// <summary>    

69     /// 解密方法    

70     /// </summary>    

71     /// <param name="Source">待解密的串</param>    

72     /// <returns>经过解密的串</returns>    

73     public string Decrypto(string Source) 

74     { 

75         byte[] bytIn = Convert.FromBase64String(Source); 

76         MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); 

77         mobjCryptoService.Key = GetLegalKey(); 

78         mobjCryptoService.IV = GetLegalIV(); 

79         ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor(); 

80         CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); 

81         StreamReader sr = new StreamReader(cs); 

82         return sr.ReadToEnd(); 

83     }
 1 方法五:

 2     using System.IO; 

 3     using System.Security.Cryptography; 

 4     using System.Text; 

 5      

 6     ... 

 7      

 8     //默认密钥向量 

 9     private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; 

10     /// <summary> 

11     /// DES加密字符串 

12     /// </summary> 

13     /// <param name="encryptString">待加密的字符串</param> 

14     /// <param name="encryptKey">加密密钥,要求为8位</param> 

15     /// <returns>加密成功返回加密后的字符串,失败返回源串</returns> 

16     public static string EncryptDES(string encryptString, string encryptKey) 

17     { 

18         try

19         { 

20             byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); 

21             byte[] rgbIV = Keys; 

22             byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); 

23             DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); 

24             MemoryStream mStream = new MemoryStream(); 

25             CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); 

26             cStream.Write(inputByteArray, 0, inputByteArray.Length); 

27             cStream.FlushFinalBlock(); 

28             return Convert.ToBase64String(mStream.ToArray()); 

29         } 

30         catch

31         { 

32             return encryptString; 

33         } 

34     } 

35      

36     /// <summary> 

37     /// DES解密字符串 

38     /// </summary> 

39     /// <param name="decryptString">待解密的字符串</param> 

40     /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param> 

41     /// <returns>解密成功返回解密后的字符串,失败返源串</returns> 

42     public static string DecryptDES(string decryptString, string decryptKey) 

43     { 

44         try

45         { 

46             byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey); 

47             byte[] rgbIV = Keys; 

48             byte[] inputByteArray = Convert.FromBase64String(decryptString); 

49             DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); 

50             MemoryStream mStream = new MemoryStream(); 

51             CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write); 

52             cStream.Write(inputByteArray, 0, inputByteArray.Length); 

53             cStream.FlushFinalBlock(); 

54             return Encoding.UTF8.GetString(mStream.ToArray()); 

55         } 

56         catch

57         { 

58             return decryptString; 

59         } 

60     }
 1 方法六(文件加密):

 2     using System.IO; 

 3     using System.Security.Cryptography; 

 4     using System.Text; 

 5      

 6     ... 

 7      

 8     //加密文件 

 9     private static void EncryptData(String inName, String outName, byte[] desKey, byte[] desIV) 

10     { 

11         //Create the file streams to handle the input and output files. 

12         FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read); 

13         FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write); 

14         fout.SetLength(0); 

15      

16         //Create variables to help with read and write. 

17         byte[] bin = new byte[100]; //This is intermediate storage for the encryption. 

18         long rdlen = 0;              //This is the total number of bytes written. 

19         long totlen = fin.Length;    //This is the total length of the input file. 

20         int len;                     //This is the number of bytes to be written at a time. 

21      

22         DES des = new DESCryptoServiceProvider(); 

23         CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write); 

24      

25         //Read from the input file, then encrypt and write to the output file. 

26         while (rdlen < totlen) 

27         { 

28             len = fin.Read(bin, 0, 100); 

29             encStream.Write(bin, 0, len); 

30             rdlen = rdlen + len; 

31         } 

32      

33         encStream.Close(); 

34         fout.Close(); 

35         fin.Close(); 

36     } 

37      

38     //解密文件 

39     private static void DecryptData(String inName, String outName, byte[] desKey, byte[] desIV) 

40     { 

41         //Create the file streams to handle the input and output files. 

42         FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read); 

43         FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write); 

44         fout.SetLength(0); 

45      

46         //Create variables to help with read and write. 

47         byte[] bin = new byte[100]; //This is intermediate storage for the encryption. 

48         long rdlen = 0;              //This is the total number of bytes written. 

49         long totlen = fin.Length;    //This is the total length of the input file. 

50         int len;                     //This is the number of bytes to be written at a time. 

51      

52         DES des = new DESCryptoServiceProvider(); 

53         CryptoStream encStream = new CryptoStream(fout, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write); 

54      

55         //Read from the input file, then encrypt and write to the output file. 

56         while (rdlen < totlen) 

57         { 

58             len = fin.Read(bin, 0, 100); 

59             encStream.Write(bin, 0, len); 

60             rdlen = rdlen + len; 

61         } 

62      

63         encStream.Close(); 

64         fout.Close(); 

65         fin.Close(); 

66  

67 }
 1 using System;

 2 using System.Security.Cryptography;//这个是处理文字编码的前提

 3 using System.Text;

 4 using System.IO;

 5 /// <summary>

 6 /// DES加密方法

 7 /// </summary>

 8 /// <param name="strPlain">明文</param>

 9 /// <param name="strDESKey">密钥</param>

10 /// <param name="strDESIV">向量</param>

11 /// <returns>密文</returns>

12 public string DESEncrypt(string strPlain,string strDESKey,string strDESIV)

13 {

14  //把密钥转换成字节数组

15  byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);

16  //把向量转换成字节数组

17  byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);

18  //声明1个新的DES对象

19  DESCryptoServiceProvider desEncrypt=new DESCryptoServiceProvider();

20  //开辟一块内存流

21  MemoryStream msEncrypt=new MemoryStream();

22  //把内存流对象包装成加密流对象

23  CryptoStream csEncrypt=new CryptoStream(msEncrypt,desEncrypt.CreateEncryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Write);

24  //把加密流对象包装成写入流对象

25  StreamWriter swEncrypt=new StreamWriter(csEncrypt);

26  //写入流对象写入明文

27  swEncrypt.WriteLine(strPlain);

28  //写入流关闭

29  swEncrypt.Close();

30  //加密流关闭

31  csEncrypt.Close();

32  //把内存流转换成字节数组,内存流现在已经是密文了

33  byte[] bytesCipher=msEncrypt.ToArray();

34  //内存流关闭

35  msEncrypt.Close();

36  //把密文字节数组转换为字符串,并返回

37  return UnicodeEncoding.Unicode.GetString(bytesCipher);

38 }

39  

40  

41  

42  

43 /// <summary>

44 /// DES解密方法

45 /// </summary>

46 /// <param name="strCipher">密文</param>

47 /// <param name="strDESKey">密钥</param>

48 /// <param name="strDESIV">向量</param>

49 /// <returns>明文</returns>

50 public string DESDecrypt(string strCipher,string strDESKey,string strDESIV)

51 {

52  //把密钥转换成字节数组

53  byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);

54  //把向量转换成字节数组

55  byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);

56  //把密文转换成字节数组

57  byte[] bytesCipher=UnicodeEncoding.Unicode.GetBytes(strCipher);

58  //声明1个新的DES对象

59  DESCryptoServiceProvider desDecrypt=new DESCryptoServiceProvider();

60  //开辟一块内存流,并存放密文字节数组

61  MemoryStream msDecrypt=new MemoryStream(bytesCipher);

62  //把内存流对象包装成解密流对象

63  CryptoStream csDecrypt=new CryptoStream(msDecrypt,desDecrypt.CreateDecryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Read);

64  //把解密流对象包装成读出流对象

65  StreamReader srDecrypt=new StreamReader(csDecrypt);

66  //明文=读出流的读出内容

67  string strPlainText=srDecrypt.ReadLine();

68  //读出流关闭

69  srDecrypt.Close();

70  //解密流关闭

71  csDecrypt.Close();

72  //内存流关闭

73  msDecrypt.Close();

74  //返回明文

75  return strPlainText;

76 }

本文转自:http://www.cnblogs.com/zengxiangzhan/archive/2010/01/30/1659687.html

你可能感兴趣的:(C#)