ASP.NET AES、DES加密 (转)

原:http://xylw.iteye.com/blog/1121714

首先,引入

using System.Security.Cryptography;

  1 /// <summary>   
  2     /// AES、DES加解密工具类   
  3     /// </summary>   
  4     public class EncryptUtil   
  5     {   
  6         private static readonly string AESKEY = "GHYU80DV3465QSFG";//16或者32位   
  7   
  8         //private static readonly string DESKEY = ConfigurationManager.AppSettings["DESKEY"].Trim();   
  9         private static readonly string DESKEY = "PORG56JK";//8位   
 10   
 11         /// <summary>   
 12         /// AES加密   
 13         /// </summary>   
 14         /// <param name="data">要加密的字符串</param>   
 15         /// <returns>加密后的字符串</returns>   
 16         public static string EncryptAES(string data)   
 17         {   
 18             try  
 19             {   
 20                 RijndaelManaged aes = new RijndaelManaged();   
 21                 byte[] bData = UTF8Encoding.UTF8.GetBytes(data);   
 22                 aes.Key = UTF8Encoding.UTF8.GetBytes(AESKEY);   
 23                 aes.IV = UTF8Encoding.UTF8.GetBytes(AESKEY);   
 24                 aes.Mode = CipherMode.CBC;   
 25                 aes.Padding = PaddingMode.PKCS7;   
 26   
 27                 ICryptoTransform iCryptoTransform = aes.CreateEncryptor();   
 28                 byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);   
 29   
 30                 // return Convert.ToBase64String(bResult); //返回base64加密;   
 31                 return ByteToHex(bResult);                //返回十六进制数据;   
 32             }   
 33             catch  
 34             {   
 35                 throw;   
 36             }   
 37         }   
 38   
 39         /// <summary>   
 40         /// AES加密   
 41         /// </summary>   
 42         /// <param name="data">要加密的字符串</param>   
 43         /// <param name="sKey">密钥串(16位或32位)</param>   
 44         /// <returns>加密后的字符串</returns>   
 45         public static string EncryptAES(string data, string sKey)   
 46         {   
 47             try  
 48             {   
 49                 RijndaelManaged aes = new RijndaelManaged();   
 50                 byte[] bData = UTF8Encoding.UTF8.GetBytes(data);   
 51                 aes.Key = UTF8Encoding.UTF8.GetBytes(sKey);   
 52                 aes.IV = UTF8Encoding.UTF8.GetBytes(sKey);   
 53                 aes.Mode = CipherMode.CBC;   
 54                 aes.Padding = PaddingMode.PKCS7;   
 55   
 56                 ICryptoTransform iCryptoTransform = aes.CreateEncryptor();   
 57                 byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);   
 58   
 59                 // return Convert.ToBase64String(bResult); //返回base64加密;   
 60                 return ByteToHex(bResult);                //返回十六进制数据;   
 61             }   
 62             catch  
 63             {   
 64                 throw;   
 65             }   
 66         }   
 67   
 68         /// <summary>   
 69         /// AES解密   
 70         /// </summary>   
 71         /// <param name="data">要解密的字符串</param>   
 72         /// <returns>解密后的字符串</returns>   
 73         public static string DecryptAES(string data)   
 74         {   
 75             try  
 76             {   
 77                 RijndaelManaged aes = new RijndaelManaged();   
 78                 //byte[] bData = Convert.FromBase64String(data); //解密base64;   
 79                 byte[] bData = HexToByte(data);                  //16进制to byte[];   
 80                 aes.Key = UTF8Encoding.UTF8.GetBytes(AESKEY);   
 81                 aes.IV = UTF8Encoding.UTF8.GetBytes(AESKEY);   
 82                 aes.Mode = CipherMode.CBC;   
 83                 aes.Padding = PaddingMode.PKCS7;   
 84   
 85                 ICryptoTransform iCryptoTransform = aes.CreateDecryptor();   
 86                 byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);   
 87                 return Encoding.UTF8.GetString(bResult);   
 88             }   
 89             catch  
 90             {   
 91                 throw;   
 92             }   
 93         }   
 94   
 95         /// <summary>   
 96         /// AES解密   
 97         /// </summary>   
 98         /// <param name="data">要解密的字符串</param>   
 99         /// <param name="sKey">密钥串(16位或32位字符串)</param>   
100         /// <returns>解密后的字符串</returns>   
101         public static string DecryptAES(string data, string sKey)   
102         {   
103             try  
104             {   
105                 RijndaelManaged aes = new RijndaelManaged();   
106                 //byte[] bData = Convert.FromBase64String(data); //解密base64;   
107                 byte[] bData = HexToByte(data);                  //16进制to byte[];   
108                 aes.Key = UTF8Encoding.UTF8.GetBytes(sKey);   
109                 aes.IV = UTF8Encoding.UTF8.GetBytes(sKey);   
110                 aes.Mode = CipherMode.CBC;   
111                 aes.Padding = PaddingMode.PKCS7;   
112   
113                 ICryptoTransform iCryptoTransform = aes.CreateDecryptor();   
114                 byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);   
115                 return Encoding.UTF8.GetString(bResult);   
116             }   
117             catch  
118             {   
119                 throw;   
120             }   
121         }   
122   
123         /// <summary>   
124         /// DES加密   
125         /// </summary>   
126         /// <param name="data">要加密的字符串</param>   
127         /// <returns>加密后的字符串</returns>   
128         public static string EncryptDES(string data)   
129         {   
130             DES des = new DESCryptoServiceProvider();   
131             des.Mode = CipherMode.ECB;   
132             des.Key = Encoding.UTF8.GetBytes(DESKEY);   
133             des.IV = Encoding.UTF8.GetBytes(DESKEY);   
134   
135             byte[] bytes = Encoding.UTF8.GetBytes(data);   
136             byte[] resultBytes = des.CreateEncryptor().TransformFinalBlock(bytes, 0, bytes.Length);   
137   
138             //return Convert.ToBase64String(resultBytes); //密文以base64返回;(可根据实际需要返回16进制数据;)   
139             return ByteToHex(resultBytes);//十六位   
140         }   
141   
142         /// <summary>   
143         /// DES加密   
144         /// </summary>   
145         /// <param name="data">要加密的字符串</param>   
146         /// <param name="key">密钥串(8位字符串)</param>   
147         /// <returns>加密后的字符串</returns>   
148         public static string EncryptDES(string data, string key)   
149         {   
150             DES des = new DESCryptoServiceProvider();   
151             des.Mode = CipherMode.ECB;   
152             des.Key = Encoding.UTF8.GetBytes(key);   
153             des.IV = Encoding.UTF8.GetBytes(key);   
154   
155             byte[] bytes = Encoding.UTF8.GetBytes(data);   
156             byte[] resultBytes = des.CreateEncryptor().TransformFinalBlock(bytes, 0, bytes.Length);   
157   
158             //return Convert.ToBase64String(resultBytes); //密文以base64返回;(可根据实际需要返回16进制数据;)   
159             return ByteToHex(resultBytes);//十六位   
160         }   
161   
162         /// <summary>   
163         /// DES解密   
164         /// </summary>   
165         /// <param name="data">要解密的字符串</param>   
166         /// <param name="key">密钥串(8位字符串)</param>   
167         /// <returns>解密后的字符串</returns>   
168         public static string DecryptDES(string data)   
169         {   
170             DES des = new DESCryptoServiceProvider();   
171             des.Mode = CipherMode.ECB;   
172             des.Key = Encoding.UTF8.GetBytes(DESKEY);   
173             des.IV = Encoding.UTF8.GetBytes(DESKEY);   
174   
175             //byte[] bytes = Convert.FromBase64String(data);   
176             byte[] bytes = HexToByte(data);   
177             byte[] resultBytes = des.CreateDecryptor().TransformFinalBlock(bytes, 0, bytes.Length);   
178   
179             return Encoding.UTF8.GetString(resultBytes);   
180         }   
181   
182         /// <summary>   
183         /// DES解密   
184         /// </summary>   
185         /// <param name="data">要解密的字符串</param>   
186         /// <param name="key">密钥串(8位字符串)</param>   
187         /// <returns>解密后的字符串</returns>   
188         public static string DecryptDES(string data, string key)   
189         {   
190             DES des = new DESCryptoServiceProvider();   
191             des.Mode = CipherMode.ECB;   
192             des.Key = Encoding.UTF8.GetBytes(key);   
193             des.IV = Encoding.UTF8.GetBytes(key);   
194   
195             //byte[] bytes = Convert.FromBase64String(data);   
196             byte[] bytes = HexToByte(data);   
197             byte[] resultBytes = des.CreateDecryptor().TransformFinalBlock(bytes, 0, bytes.Length);   
198   
199             return Encoding.UTF8.GetString(resultBytes);   
200         }   
201   
202         // method to convert hex string into a byte array     
203         private static byte[] HexToByte(string data)   
204         {   
205             data = data.Replace(" ", "");   
206   
207             byte[] comBuffer = new byte[data.Length / 2];   
208   
209             for (int i = 0; i < data.Length; i += 2)   
210                 comBuffer[i / 2] = (byte)Convert.ToByte(data.Substring(i, 2), 16);   
211   
212             return comBuffer;   
213         }   
214   
215         // method to convert a byte array into a hex string     
216         private static string ByteToHex(byte[] comByte)   
217         {   
218             StringBuilder builder = new StringBuilder(comByte.Length * 3);   
219   
220             foreach (byte data in comByte)   
221                 builder.Append(Convert.ToString(data, 16).PadLeft(2, '0').PadRight(3, ' '));   
222   
223             return builder.ToString().ToUpper().Replace(" ", "");   
224         }   
225     }  
原文地址:https://www.cnblogs.com/ryhan/p/2660372.html