星期五, 五月 16, 2008

3DES加解密

///    <summary>   
        ///   3des加密字符串   
        ///    </summary>   
        ///    <param   name="a_strString">要加密的字符串 </param>   
        ///    <param   name="a_strKey">密钥 </param>   
        ///    <returns>加密后并经base64编码的字符串 </returns>   
        ///    <remarks>静态方法,采用默认ascii编码 </remarks>   
        public static string Encrypt3DES(string a_strString, string a_strKey)
        {
            TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
            MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

            DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(a_strKey));
            DES.Mode = CipherMode.ECB;

            ICryptoTransform DESEncrypt = DES.CreateEncryptor();

            byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(a_strString);
            return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
        }//end   method   

///    <summary>   
        ///   3des解密字符串   
        ///    </summary>   
        ///    <param   name="a_strString">要解密的字符串 </param>   
        ///    <param   name="a_strKey">密钥 </param>   
        ///    <returns>解密后的字符串 </returns>   
        ///    <exception   cref="">密钥错误 </exception>   
        ///    <remarks>静态方法,采用默认ascii编码 </remarks>   
        public static string Decrypt3DES(string a_strString, string a_strKey)
        {
            TripleDESCryptoServiceProvider DES = new
            TripleDESCryptoServiceProvider();
            MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

            DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(a_strKey));
            DES.Mode = CipherMode.ECB;

            ICryptoTransform DESDecrypt = DES.CreateDecryptor();

            string result = "";
            try
            {
                byte[] Buffer = Convert.FromBase64String(a_strString);
                result = ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
            }
            catch (Exception e)
            {
                throw (new Exception("不是有效的 base64  字符串", e));
            }

            return result;
        }//end   method   

没有评论: