114 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | ||
| using System.Collections.Generic;
 | ||
| using System.Text;
 | ||
| using System.Security.Cryptography;
 | ||
| using System.IO;
 | ||
| namespace ryCommon
 | ||
| {
 | ||
|     class clsAES
 | ||
|     {
 | ||
|         //默认密钥向量 
 | ||
|         private static byte[] _key1 = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
 | ||
|         /// <summary>
 | ||
|         /// AES加密算法
 | ||
|         /// </summary>
 | ||
|         /// <param name="plainText">明文字符串</param>
 | ||
|         /// <param name="strKey">密钥</param>
 | ||
|         /// <returns>返回加密后的密文字节数组</returns>
 | ||
|         public static byte[] AESEncrypt(string plainText, string strKey)
 | ||
|         {
 | ||
|             //分组加密算法
 | ||
|             SymmetricAlgorithm des = Rijndael.Create();
 | ||
|             byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字节数组
 | ||
|             //设置密钥及密钥向量
 | ||
|             des.Key = Encoding.UTF8.GetBytes(strKey);
 | ||
|             des.IV = _key1;
 | ||
|             MemoryStream ms = new MemoryStream();
 | ||
|             CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
 | ||
|             cs.Write(inputByteArray, 0, inputByteArray.Length);
 | ||
|             cs.FlushFinalBlock();
 | ||
|             byte[] cipherBytes = ms.ToArray();//得到加密后的字节数组
 | ||
|             cs.Close();
 | ||
|             ms.Close();
 | ||
|             return cipherBytes;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// AES解密
 | ||
|         /// </summary>
 | ||
|         /// <param name="cipherText">密文字节数组</param>
 | ||
|         /// <param name="strKey">密钥</param>
 | ||
|         /// <returns>返回解密后的字符串</returns>
 | ||
|         public static byte[] AESDecrypt(byte[] cipherText, string strKey)
 | ||
|         {
 | ||
|             SymmetricAlgorithm des = Rijndael.Create();
 | ||
|             des.Key = Encoding.UTF8.GetBytes(strKey);
 | ||
|             des.IV = _key1;
 | ||
|             byte[] decryptBytes = new byte[cipherText.Length];
 | ||
|             MemoryStream ms = new MemoryStream(cipherText);
 | ||
|             CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read);
 | ||
|             cs.Read(decryptBytes, 0, decryptBytes.Length);
 | ||
|             cs.Close();
 | ||
|             ms.Close();
 | ||
|             return decryptBytes;
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 加密
 | ||
|         /// </summary>
 | ||
|         /// <param name="Message"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public static string Encode(string data,string pass)
 | ||
|         {
 | ||
|             byte[] encryptBytes = AESEncrypt(data, ConvertKey(pass));
 | ||
|             return Convert.ToBase64String(encryptBytes);
 | ||
|             //将加密后的密文转换为Base64编码,以便显示,可以查看下结果
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 解码
 | ||
|         /// </summary>
 | ||
|         /// <param name="Message"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public static string Decode(string data, string pass)
 | ||
|         {
 | ||
|             try
 | ||
|             {
 | ||
|                 //解密
 | ||
|                 byte[] decryptBytes = AESDecrypt(Convert.FromBase64String(data), ConvertKey(pass));
 | ||
|                 //将解密后的结果转换为字符串,也可以将该步骤封装在解密算法中
 | ||
|                 string result = Encoding.UTF8.GetString(decryptBytes);
 | ||
|                 return result.Replace("\0", "");
 | ||
|             }
 | ||
|             catch
 | ||
|             {
 | ||
|                 return "";
 | ||
|             }
 | ||
|         }
 | ||
|         public static string GetMD5(string str)
 | ||
|         {
 | ||
|             StringBuilder sb = new StringBuilder();
 | ||
|             foreach (byte b in System.Security.Cryptography.MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(str)))
 | ||
|             {
 | ||
|                 sb.Append(b.ToString("X2"));
 | ||
|             }
 | ||
|             return sb.ToString();
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 转换密钥到合法密钥
 | ||
|         /// </summary>
 | ||
|         /// <param name="pass"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public static string ConvertKey(string pass)
 | ||
|         {
 | ||
|             string sxStr = GetMD5(pass);
 | ||
|             if (sxStr.Length > 32)
 | ||
|             {
 | ||
|                 return sxStr.Substring(0, 32);
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 return (sxStr + sxStr).Substring(0, 32);
 | ||
|             }
 | ||
|         }
 | ||
|     }
 | ||
| }
 |