ASP.NET AES、DES加密

首先,引入

using System.Security.Cryptography;
/// <summary>   
    /// AES、DES加解密工具类   
    /// </summary>   
    public class EncryptUtil   
    {   
        private static readonly string AESKEY = "GHYU80DV3465QSFG";//16或者32位   
  
        //private static readonly string DESKEY = ConfigurationManager.AppSettings["DESKEY"].Trim();   
        private static readonly string DESKEY = "PORG56JK";//8位   
  
        /// <summary>   
        /// AES加密   
        /// </summary>   
        /// <param name="data">要加密的字符串</param>   
        /// <returns>加密后的字符串</returns>   
        public static string EncryptAES(string data)   
        {   
            try  
            {   
                RijndaelManaged aes = new RijndaelManaged();   
                byte[] bData = UTF8Encoding.UTF8.GetBytes(data);   
                aes.Key = UTF8Encoding.UTF8.GetBytes(AESKEY);   
                aes.IV = UTF8Encoding.UTF8.GetBytes(AESKEY);   
                aes.Mode = CipherMode.CBC;   
                aes.Padding = PaddingMode.PKCS7;   
  
                ICryptoTransform iCryptoTransform = aes.CreateEncryptor();   
                byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);   
  
                // return Convert.ToBase64String(bResult); //返回base64加密;   
                return ByteToHex(bResult);                //返回十六进制数据;   
            }   
            catch  
            {   
                throw;   
            }   
        }   
  
        /// <summary>   
        /// AES加密   
        /// </summary>   
        /// <param name="data">要加密的字符串</param>   
        /// <param name="sKey">密钥串(16位或32位)</param>   
        /// <returns>加密后的字符串</returns>   
        public static string EncryptAES(string data, string sKey)   
        {   
            try  
            {   
                RijndaelManaged aes = new RijndaelManaged();   
                byte[] bData = UTF8Encoding.UTF8.GetBytes(data);   
                aes.Key = UTF8Encoding.UTF8.GetBytes(sKey);   
                aes.IV = UTF8Encoding.UTF8.GetBytes(sKey);   
                aes.Mode = CipherMode.CBC;   
                aes.Padding = PaddingMode.PKCS7;   
  
                ICryptoTransform iCryptoTransform = aes.CreateEncryptor();   
                byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);   
  
                // return Convert.ToBase64String(bResult); //返回base64加密;   
                return ByteToHex(bResult);                //返回十六进制数据;   
            }   
            catch  
            {   
                throw;   
            }   
        }   
  
        /// <summary>   
        /// AES解密   
        /// </summary>   
        /// <param name="data">要解密的字符串</param>   
        /// <returns>解密后的字符串</returns>   
        public static string DecryptAES(string data)   
        {   
            try  
            {   
                RijndaelManaged aes = new RijndaelManaged();   
                //byte[] bData = Convert.FromBase64String(data); //解密base64;   
                byte[] bData = HexToByte(data);                  //16进制to byte[];   
                aes.Key = UTF8Encoding.UTF8.GetBytes(AESKEY);   
                aes.IV = UTF8Encoding.UTF8.GetBytes(AESKEY);   
                aes.Mode = CipherMode.CBC;   
                aes.Padding = PaddingMode.PKCS7;   
  
                ICryptoTransform iCryptoTransform = aes.CreateDecryptor();   
                byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);   
                return Encoding.UTF8.GetString(bResult);   
            }   
            catch  
            {   
                throw;   
            }   
        }   
  
        /// <summary>   
        /// AES解密   
        /// </summary>   
        /// <param name="data">要解密的字符串</param>   
        /// <param name="sKey">密钥串(16位或32位字符串)</param>   
        /// <returns>解密后的字符串</returns>   
        public static string DecryptAES(string data, string sKey)   
        {   
            try  
            {   
                RijndaelManaged aes = new RijndaelManaged();   
                //byte[] bData = Convert.FromBase64String(data); //解密base64;   
                byte[] bData = HexToByte(data);                  //16进制to byte[];   
                aes.Key = UTF8Encoding.UTF8.GetBytes(sKey);   
                aes.IV = UTF8Encoding.UTF8.GetBytes(sKey);   
                aes.Mode = CipherMode.CBC;   
                aes.Padding = PaddingMode.PKCS7;   
  
                ICryptoTransform iCryptoTransform = aes.CreateDecryptor();   
                byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);   
                return Encoding.UTF8.GetString(bResult);   
            }   
            catch  
            {   
                throw;   
            }   
        }   
  
        /// <summary>   
        /// DES加密   
        /// </summary>   
        /// <param name="data">要加密的字符串</param>   
        /// <returns>加密后的字符串</returns>   
        public static string EncryptDES(string data)   
        {   
            DES des = new DESCryptoServiceProvider();   
            des.Mode = CipherMode.ECB;   
            des.Key = Encoding.UTF8.GetBytes(DESKEY);   
            des.IV = Encoding.UTF8.GetBytes(DESKEY);   
  
            byte[] bytes = Encoding.UTF8.GetBytes(data);   
            byte[] resultBytes = des.CreateEncryptor().TransformFinalBlock(bytes, 0, bytes.Length);   
  
            //return Convert.ToBase64String(resultBytes); //密文以base64返回;(可根据实际需要返回16进制数据;)   
            return ByteToHex(resultBytes);//十六位   
        }   
  
        /// <summary>   
        /// DES加密   
        /// </summary>   
        /// <param name="data">要加密的字符串</param>   
        /// <param name="key">密钥串(8位字符串)</param>   
        /// <returns>加密后的字符串</returns>   
        public static string EncryptDES(string data, string key)   
        {   
            DES des = new DESCryptoServiceProvider();   
            des.Mode = CipherMode.ECB;   
            des.Key = Encoding.UTF8.GetBytes(key);   
            des.IV = Encoding.UTF8.GetBytes(key);   
  
            byte[] bytes = Encoding.UTF8.GetBytes(data);   
            byte[] resultBytes = des.CreateEncryptor().TransformFinalBlock(bytes, 0, bytes.Length);   
  
            //return Convert.ToBase64String(resultBytes); //密文以base64返回;(可根据实际需要返回16进制数据;)   
            return ByteToHex(resultBytes);//十六位   
        }   
  
        /// <summary>   
        /// DES解密   
        /// </summary>   
        /// <param name="data">要解密的字符串</param>   
        /// <param name="key">密钥串(8位字符串)</param>   
        /// <returns>解密后的字符串</returns>   
        public static string DecryptDES(string data)   
        {   
            DES des = new DESCryptoServiceProvider();   
            des.Mode = CipherMode.ECB;   
            des.Key = Encoding.UTF8.GetBytes(DESKEY);   
            des.IV = Encoding.UTF8.GetBytes(DESKEY);   
  
            //byte[] bytes = Convert.FromBase64String(data);   
            byte[] bytes = HexToByte(data);   
            byte[] resultBytes = des.CreateDecryptor().TransformFinalBlock(bytes, 0, bytes.Length);   
  
            return Encoding.UTF8.GetString(resultBytes);   
        }   
  
        /// <summary>   
        /// DES解密   
        /// </summary>   
        /// <param name="data">要解密的字符串</param>   
        /// <param name="key">密钥串(8位字符串)</param>   
        /// <returns>解密后的字符串</returns>   
        public static string DecryptDES(string data, string key)   
        {   
            DES des = new DESCryptoServiceProvider();   
            des.Mode = CipherMode.ECB;   
            des.Key = Encoding.UTF8.GetBytes(key);   
            des.IV = Encoding.UTF8.GetBytes(key);   
  
            //byte[] bytes = Convert.FromBase64String(data);   
            byte[] bytes = HexToByte(data);   
            byte[] resultBytes = des.CreateDecryptor().TransformFinalBlock(bytes, 0, bytes.Length);   
  
            return Encoding.UTF8.GetString(resultBytes);   
        }   
  
        // method to convert hex string into a byte array     
        private static byte[] HexToByte(string data)   
        {   
            data = data.Replace(" ", "");   
  
            byte[] comBuffer = new byte[data.Length / 2];   
  
            for (int i = 0; i < data.Length; i += 2)   
                comBuffer[i / 2] = (byte)Convert.ToByte(data.Substring(i, 2), 16);   
  
            return comBuffer;   
        }   
  
        // method to convert a byte array into a hex string     
        private static string ByteToHex(byte[] comByte)   
        {   
            StringBuilder builder = new StringBuilder(comByte.Length * 3);   
  
            foreach (byte data in comByte)   
                builder.Append(Convert.ToString(data, 16).PadLeft(2, '0').PadRight(3, ' '));   
  
            return builder.ToString().ToUpper().Replace(" ", "");   
        }   
    }  

你可能感兴趣的:(asp.net)