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
}
}