MD5加密/对称加密/正则过滤字符串

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Web.Security;

namespace Teewoo.Common
{
    /// <summary>
    /// 加密解密算法的具体实现类
    /// </summary>
    public class EncryptHelper
    {
        /// <summary>
        /// 生成32位的MD5字符串:原生态加密(FormsAuthentication)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string EncryptToMD5_Forms(string str)
        {
            return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5");
        }

        /// <summary>
        /// 生成32位的MD5字符串(MD5CryptoServiceProvider)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string EncryptToMD5_CSP(string str)
        {
            byte[] b = Encoding.Unicode.GetBytes(str.ToCharArray());  // 字符转换并生成数组
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] md5byte = md5.ComputeHash(b);
            int i, j;
            StringBuilder sb = new StringBuilder();

            foreach (byte btmp in md5byte)
            {
                i = Convert.ToInt32(btmp);

                j = i >> 4;
                sb.Append(Convert.ToString(j, 16));

                j = ((i << 4) & 0x00ff) >> 4;
                sb.Append(Convert.ToString(j, 16));
            }

            return sb.ToString();
        }

        /// <summary>
        /// 生成32位的MD5字符串(MD5Hash)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string EncryptToMD5_Hash(string str)
        {
            MD5 md5Hash = MD5.Create();
            byte[] data = md5Hash.ComputeHash(Encoding.GetEncoding("gb2312").GetBytes(str));
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < data.Length; i++)
                sb.Append(data[i].ToString("x2"));

            return sb.ToString();
        }
        
        /// <summary>
        /// 生成16位的MD5字符串
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string EncryptToMD5_16(string str)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

            string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str)), 4, 8);

            return t2.Replace("-", "");
        }

        /// <summary>
        /// 正则表达式 过滤字符串
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static string SafeRequest(string text)
        {
            #region
            text = Regex.Replace(text, "<[^>]+>", "", RegexOptions.IgnoreCase | RegexOptions.Compiled);
            text = Regex.Replace(text, "--|;|'|\"", " ", RegexOptions.Compiled | RegexOptions.Multiline);
            // Finally remove any extra spaces from the string
            text = Regex.Replace(text, " {1,}", " ", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Multiline);
            return text;
            #endregion
        }

        #region # TripleDES #

        /// <summary>
        /// TripleDES加密(对称加密)
        /// </summary>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string EncryptToTripleDES(string key, string iv, string str)
        {
            SymmetricAlgorithm CSP = new TripleDESCryptoServiceProvider();

            CSP.Key = Convert.FromBase64String(key);
            CSP.IV = Convert.FromBase64String(iv);                  // 指定加密的运算模式  
            CSP.Mode = System.Security.Cryptography.CipherMode.ECB; // 获取或设置加密算法的填充模式  
            CSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

            ICryptoTransform ct = CSP.CreateEncryptor(CSP.Key, CSP.IV);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
            byte[] byt = Encoding.UTF8.GetBytes(str);

            cs.Write(byt, 0, byt.Length);
            cs.FlushFinalBlock();
            cs.Close();

            return Convert.ToBase64String(ms.ToArray());
        }

        /// <summary>
        /// TripleDES解密(对称加密)
        /// </summary>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string DecryptFromTripleDES(string key, string iv, string str)
        {
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
            ICryptoTransform ct;
            MemoryStream ms;
            CryptoStream cs;
            byte[] byt;

            des.Key = Convert.FromBase64String(key);
            des.IV = Convert.FromBase64String(iv);
            des.Mode = System.Security.Cryptography.CipherMode.ECB;
            des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

            ct = des.CreateDecryptor(des.Key, des.IV);
            ms = new MemoryStream();
            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

            byt = Convert.FromBase64String(str);

            cs.Write(byt, 0, byt.Length);
            cs.FlushFinalBlock();
            cs.Close();

            return Encoding.UTF8.GetString(ms.ToArray());
        }

        #endregion
    }
}

 

posted @ 2013-10-16 18:46  玢棂  阅读(557)  评论(0编辑  收藏  举报