标签:
 /// <summary>
        /// DES加密算法
        /// </summary>
        /// <param name="toEncrypt">要加密的16进制字符串</param>
        /// <param name="_DESKey">16进制密钥</param>
        /// <returns>加密后的结果</returns>
        public string DESEncrypt(string toEncrypt, string _DESKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();    //定义DES加密服务提供类
            byte[] inputByte = strToToHexByte(toEncrypt);                     //将16进制的加密字符串转换为byte数组
            byte[] key = strToToHexByte(_DESKey);                             //将16进制加密密匙转化为byte数组
            des.Key = key;                                                    //加密密钥(必须为8字节)
            des.IV = key;                                                     //暂时还未研究
            des.Padding = PaddingMode.Zeros;                                  //设置对称算法中的填充模式(很重要,不同的填充模式,结果的字节数就不同,结果也不相同)
            des.Mode = CipherMode.ECB;                                        //设置对称算法中的运算模式(很重要),不同的模式,加密出来的结果就不同
            MemoryStream ms = new MemoryStream();                             //创建其支持存储区为内存的流
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);//定义将数据流链接到加密转换的流
            cs.Write(inputByte, 0, inputByte.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())                                   //将字节流转换成字节数组
            {
                ret.AppendFormat("{0:X2}", b);                                 //向可变字符串追加转换成十六进制数字符串的加密后byte数组
            }
            return ret.ToString();
        }
        /// <summary>
        /// DES解密算法
        /// </summary>
        /// <param name="toDecrypt">要解密的16进制字符串</param>
        /// <param name="_DESKey">16进制密钥</param>
        /// <returns></returns>
        public string DESDecrypt(string toDecrypt, string _DESKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();    //定义DES加密服务提供类
            byte[] inputByte = strToToHexByte(toDecrypt);                     //将16进制的解密字符串转换为byte数组
            byte[] key = strToToHexByte(_DESKey);                             //将16进制加密密匙转化为byte数组
            des.Key = key;                                                    //加密密钥(必须为8字节)
            des.IV = key;                                                     //暂时还未研究
            des.Padding = PaddingMode.Zeros;                                  //设置对称算法中的填充模式(很重要,不同的填充模式,结果的字节数就不同,结果也不相同)
            des.Mode = CipherMode.ECB;                                        //设置对称算法中的运算模式(很重要),不同的模式,加密出来的结果就不同
            MemoryStream ms = new MemoryStream();                             //创建其支持存储区为内存的流
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);//定义将数据流链接到加密转换的流
            cs.Write(inputByte, 0, inputByte.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())                                   //将字节流转换成字节数组
            {
                ret.AppendFormat("{0:X2}", b);                                 //向可变字符串追加转换成十六进制数字符串的加密后byte数组
            }
            return ret.ToString();
        }
        /// <summary>
        /// 将16进制字符串转换成字节数组
        /// </summary>
        /// <param name="hexString">16进制字符串</param>
        /// <returns>输出字节数组</returns>
        private static byte[] strToToHexByte(string hexString)
        {
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
标签:
原文地址:http://www.cnblogs.com/xchx2014/p/4255397.html