1 using System; 2 using System.Security.Cryptography; 3 using System.Text; 4 using System.IO; 5 6 namespace AES 7 { 8 public class AESEncryption 9 { 10 private static string strKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 11 /// <summary> 12 /// AES加密算法 13 /// </summary> 14 /// <param name="plainText">明文字符串</param> 15 /// <param name="strKey">密钥</param> 16 /// <returns>返回加密后的密文字节数组</returns> 17 public static string AESEncrypt(string plainText) 18 { 19 try 20 { 21 //分组加密算法 22 RijndaelManaged aes = new RijndaelManaged(); 23 byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字节数组 24 25 //设置密钥及密钥向量 26 aes.Key = Encoding.UTF8.GetBytes(GetMD5(strKey)); 27 aes.IV = Encoding.UTF8.GetBytes(GetMD5(strKey).Substring(8, 16)); 28 aes.Mode = CipherMode.CBC; 29 aes.Padding = PaddingMode.PKCS7; 30 31 ICryptoTransform transform = aes.CreateEncryptor(); 32 byte[] buffer= transform.TransformFinalBlock(inputByteArray, 0, inputByteArray.Length); 33 34 //System.IO.MemoryStream ms = new System.IO.MemoryStream(); 35 36 //CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write); 37 38 //cs.Write(inputByteArray, 0, inputByteArray.Length); 39 //cs.FlushFinalBlock(); 40 41 StringBuilder ret = new StringBuilder(); 42 foreach (byte b in buffer) 43 { 44 ret.AppendFormat("{0:x2}", b); 45 } 46 return ret.ToString(); 47 } 48 catch 49 { 50 return plainText; 51 } 52 } 53 54 /// <summary> 55 /// AES解密 56 /// </summary> 57 /// <param name="cipherText">密文字节数组</param> 58 /// <param name="strKey">密钥</param> 59 /// <returns>返回解密后的字符串</returns> 60 public static string AESDecrypt(string cipherText) 61 { 62 try 63 { 64 RijndaelManaged aes = new RijndaelManaged(); 65 66 int len; 67 len = cipherText.Length / 2; 68 byte[] inputByteArray = new byte[len]; 69 int x, i; 70 for (x = 0; x < len; x++) 71 { 72 i = Convert.ToInt32(cipherText.Substring(x * 2, 2), 16); 73 inputByteArray[x] = (byte)i; 74 } 75 76 //byte[] inputByteArray = Encoding.UTF8.GetBytes(cipherText); 77 //设置密钥及密钥向量 78 aes.Key = Encoding.UTF8.GetBytes(GetMD5(strKey)); 79 aes.IV = Encoding.UTF8.GetBytes(GetMD5(strKey).Substring(8, 16)); 80 aes.Mode = CipherMode.CBC; 81 aes.Padding = PaddingMode.PKCS7; 82 83 ICryptoTransform transform = aes.CreateDecryptor(); 84 byte[] buffer = transform.TransformFinalBlock(inputByteArray, 0, inputByteArray.Length); 85 86 //System.IO.MemoryStream ms = new System.IO.MemoryStream(); 87 //CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write); 88 //cs.Write(inputByteArray, 0, inputByteArray.Length); 89 //cs.FlushFinalBlock(); 90 string strDecrypt = Encoding.UTF8.GetString(buffer); 91 return strDecrypt; 92 93 } 94 catch 95 { 96 return cipherText; 97 } 98 } 99 100 public static string GetMD5(string str) 101 { 102 StringBuilder sb = new StringBuilder(); 103 foreach (byte b in System.Security.Cryptography.MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(str))) 104 { 105 sb.Append(b.ToString("X2")); 106 } 107 return sb.ToString(); 108 } 109 110 111 } 112 }