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(" ", "");
        }
    }

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值