TripleDes加密解密

来源:互联网 发布:算法复杂性分析试题 编辑:程序博客网 时间:2024/06/05 10:26

TripleDes算法加密解密总结:

 

 public static TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
       
        /// <summary>
        /// TripleDES加密字符串
        /// </summary>
        /// <param name="encryptString">待加密的字符串</param>
        /// <param name="encryptKey">加密密钥,要求为8位</param>
        /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
        public static byte[] Encode(string encryptString, byte[] Key, byte[] IV)
        {
            MemoryStream mStream = new MemoryStream();
            CryptoStream cStream = new CryptoStream(mStream, new TripleDESCryptoServiceProvider().CreateEncryptor(Key,IV), CryptoStreamMode.Write);
            byte[] toEntry = Encoding.Unicode.GetBytes(encryptString);
            try
            {
                cStream.Write(toEntry, 0, toEntry.Length);
                cStream.FlushFinalBlock();
                byte[] encryptedBytes = mStream.ToArray();
                //Encoding.Unicode.GetString(encryptedBytes,0,encryptedBytes.Length);
                return encryptedBytes;
            }
            catch (CryptographicException err)
            {
                throw new Exception("加密出错:" + err.Message);
            }
            finally
            {
                cStream.Close();
                mStream.Close();
            }

        }

        /// <summary>
        /// TripleDES解密字符串
        /// </summary>
        /// <param name="decryptString">待解密的字符串</param>
        /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
        /// <returns>解密成功返回解密后的字符串,失败返源串</returns>

        public static string Decode(byte[] EncryData, byte[] Key, byte[] IV)
        {
            MemoryStream mStream = new MemoryStream(EncryData);
            CryptoStream cStream = new CryptoStream(mStream, new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV), CryptoStreamMode.Read);
            byte[] DescryptBytes = new byte[EncryData.Length];
            try
            {
                cStream.Read(DescryptBytes, 0, DescryptBytes.Length);
                string DescryptString = Encoding.Unicode.GetString(DescryptBytes, 0, DescryptBytes.Length);
                return DescryptString;
            }
            catch (CryptographicException err)
            {
                throw new Exception("解密出错:" + err.Message);
            }
            finally
            {
                cStream.Close();
                mStream.Close();
            }
        }