DES加密解密

来源:互联网 发布:首富隆起知乎 编辑:程序博客网 时间:2024/06/16 08:03
    /// <summary>    /// 加密类    /// <para>Date:2012-04-23 PM.</para>    /// </summary>    public class Encrypt    {        /// <summary>        /// 默认密钥向量.        /// </summary>        private static readonly byte[] Keys = { 0xAB, 0xCD, 0xEF, 0x68, 0xDB, 0xFA, 0x01, 0xE2 };        private Encrypt() { }        /// <summary>        /// 创建加密类对象.        /// </summary>        public static Encrypt CreateCryptoServiceProvider()        {            return new Encrypt();        }        /// <summary>        /// DES加密.        /// </summary>        /// <param name="_EncryptStr">待加密字符串.</param>        /// <param name="_EncryptKey">加密密钥. 8位</param>        /// <returns></returns>        public String DESEncrypt(String _EncryptStr,String _EncryptKey)        {            try            {                byte[] RogerKey = Encoding.Default.GetBytes(_EncryptKey.Substring(0, 8));                byte[] RogerIV = Keys;                byte[] RogerString = Encoding.Default.GetBytes(_EncryptStr);                DES RogerDES = new DESCryptoServiceProvider();                MemoryStream RogerMs = new MemoryStream();                CryptoStream RogerCs = new CryptoStream(RogerMs, RogerDES.CreateEncryptor(RogerKey, RogerIV), CryptoStreamMode.Write);                RogerCs.Write(RogerString, 0, RogerString.Length);                RogerCs.FlushFinalBlock();                String result = BitConverter.ToString(RogerMs.ToArray()).Replace("-", string.Empty);                return result;            }            catch (Exception)            {                return _EncryptStr;            }        }        /// <summary>        /// DES解密.        /// </summary>        /// <param name="_DecryptStr">等解密的字符串.</param>        /// <param name="_DecryptKey">解密密钥. 8位</param>        /// <returns></returns>        public String DESDecrypt(String _DecryptStr, String _DecryptKey)        {            try            {                byte[] RogerKey = Encoding.Default.GetBytes(_DecryptKey.Substring(0, 8));                byte[] RogerIV = Keys;                int blocks = _DecryptStr.Length / 2;                byte[] EncryptByteData = new byte[blocks];                String tempItem = null;                for (int i = 0; i < blocks; i++)                {                    tempItem = _DecryptStr.Substring(i * 2, 2);                    EncryptByteData[i] = byte.Parse(tempItem, System.Globalization.NumberStyles.HexNumber);                }                DES RogerDES = new DESCryptoServiceProvider();                MemoryStream RogerMs = new MemoryStream();                CryptoStream RogerCs = new CryptoStream(RogerMs, RogerDES.CreateDecryptor(RogerKey, RogerIV), CryptoStreamMode.Write);                RogerCs.Write(EncryptByteData, 0, EncryptByteData.Length);                RogerCs.FlushFinalBlock();                String result = Encoding.Default.GetString(RogerMs.ToArray());                return result;            }            catch (Exception)            {                return _DecryptStr;            }        }    }