using System;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Text;
using System.Text.RegularExpressions;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Security.Cryptography;
/*
一般放在BLL层下的Common.cs文件中:
using System; //string
using System.Configuration; //调用web.config要引用的命名空间
using System.Web; //HttpContext
using System.Web.UI; //ctl.RenderControl(new HtmlTextWriter(tempWriter));
using System.Text; //StringBuilder
using System.Text.RegularExpressions; //Regex
using System.Drawing; // Image originalImage = Image.FromFile(originalImagePath);
using System.IO; //TextWriter tempWriter = new StringWriter();
using System.Security.Cryptography; //DESCryptoServiceProvider des = new DESCryptoServiceProvider();
*/
namespace System
{
#region 公用方法
/// <summary>
/// 公用方法
/// </summary>
public class Common
{
public Common()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region 1、防止SQL注入方法
/// <summary>
/// 防止SQL注入,过滤字符串
/// </summary>
/// <param name="arg"></param>
/// <returns></returns>
public static string ReplaceSqlStr(string arg)
{
string[] Lawlesses ={ "=", "net user", "xp_cmdshell", "add", "exec master.dbo.xp_cmdshell", "net localgroup administrators", "select", "Asc", "count", "char", "mid", "'", "/"", "insert", "delete from", "drop table", "update", "truncate", "from", "%" };
StringBuilder rltsb = new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.Append(arg);
rltsb.Append(arg);
for (int i = 0; i < Lawlesses.Length; i++)
{
while (sb.ToString().IndexOf(Lawlesses[i], System.StringComparison.CurrentCultureIgnoreCase) >= 0)
{
rltsb.Remove(0, rltsb.Length);
rltsb.Append(sb.ToString().Substring(0, sb.ToString().IndexOf(Lawlesses[i], System.StringComparison.CurrentCultureIgnoreCase)) + "*" + sb.ToString().Substring(sb.ToString().IndexOf(Lawlesses[i], System.StringComparison.CurrentCultureIgnoreCase) + Lawlesses[i].Length));
sb.Remove(0, sb.Length);
sb.Append(rltsb.ToString());
}
}
return rltsb.ToString();
}
#endregion
#region 2、获取客户端真实IP
/// <summary>
/// 取得客户端真实IP。如果有代理则取第一个非内网地址
/// </summary>
public static string IPAddress
{
get
{
string result = String.Empty;
result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (result != null && result != String.Empty)
{
//可能有代理
if (result.IndexOf(".") == -1) //没有“.”肯定是非IPv4格式
result = null;
else
{
if (result.IndexOf(",") != -1)
{
//有“,”,估计多个代理。取第一个不是内网的IP。
result = result.Replace(" ", "").Replace("'", "");
string[] temparyip = result.Split(",;".ToCharArray());
for (int i = 0; i < temparyip.Length; i++)
{
if (IsIPAddress(temparyip[i])
&& temparyip[i].Substring(0, 3) != "10."
&& temparyip[i].Substring(0, 7) != "192.168"
&& temparyip[i].Substring(0, 7) != "172.16.")
{
return temparyip[i]; //找到不是内网的地址
}
}
}
else if (IsIPAddress(result)) //代理即是IP格式
return result;
else
result = null; //代理中的内容 非IP,取IP
}
}
string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (null == result || result == String.Empty)
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (result == null || result == String.Empty)
result = HttpContext.Current.Request.UserHostAddress;
return result;
}
}
/// <summary>
/// 判断是否是IP地址格式 0.0.0.0
/// </summary>
/// <param name="str1">待判断的IP地址</param>
/// <returns>true or false</returns>
private static bool IsIPAddress(string str1)
{
if (str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15) return false;
string regformat = @"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}___FCKpd___0quot;;
Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
return regex.IsMatch(str1);
}
#endregion
#region 3、生成缩略图
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式--"W"://指定宽,高按比例、"H"://指定高,宽按比例、"HW"://指定高宽,缩放于指定的范围内</param>
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
int towidth = width;
int toheight = height;
int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;
switch (mode)
{
case "HW"://指定高宽缩放(可能变形:2006-5-27樊海斌修改:使显示图片不变形。)
if (originalImage.Height * 1.0 / originalImage.Width > 1.0)
{
towidth = originalImage.Width * width / originalImage.Height;
}
else
{
toheight = originalImage.Height * height / originalImage.Width;
}
break;
case "W"://指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width;
break;
case "H"://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;
break;
case "Cut"://指定高宽裁减(不变形)
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = 0;
x = (originalImage.Width - ow) / 2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = 0;
y = (originalImage.Height - oh) / 2;
}
break;
default:
break;
}
//新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
//新建一个画板
Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
//=========用于旋转图片======樊海斌=======
//Matrix myMatrix = new Matrix();
//PointF pointF00 = new PointF(0,0);
//myMatrix.Rotate(30.6f);
//myMatrix.RotateAt(30.6f,pointF00); //按指定点旋转
//g.Transform=myMatrix;
//=========================================
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight), new Rectangle(x, y, ow, oh), GraphicsUnit.Pixel);
try
{
//以jpg格式保存缩略图
bitmap.Save(thumbnailPath, originalImage.RawFormat);
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
#endregion
#region 4、返回站点路径,如果是虚拟目录,则包含虚拟目录
/// <summary>
/// 返回结果:如果是站点:"/";如果是虚拟目录:"/虚拟目录名/"
/// </summary>
public static string AppName
{
get
{
string appPath = HttpContext.Current.Request.ApplicationPath;
if (appPath.Trim() == "/")
return "/";
else
return appPath + "/";
}
}
#endregion
#region 5、返回以字节方式截取字符串
/// <summary>
/// 返回以字节方式载取的字符串
/// </summary>
/// <param name="str"></param>
/// <param name="length"></param>
/// <returns></returns>
public static string GetSubString(string str, int length)
{
string temp = str;
int j = 0;
int k = 0;
for (int i = 0; i < temp.Length; i++)
{
if (Regex.IsMatch(temp.Substring(i, 1), @"[/u4e00-/u9fa5]+"))
j += 2;
else
j++;
if (j >= length)
{
return temp.Substring(0, k - 1);
}
k++;
}
return temp;
}
#endregion
#region 6、简写MD5加密
/// <summary>
/// 返回MD5加密后的密文
/// </summary>
/// <param name="str">原文字符串</param>
/// <param name="code">密文长度:16/32 ,非16则返回32位的密文</param>
/// <returns></returns>
public static string Md5(string str, int code)
{
if (code == 16) //16位MD5加密(取32位加密的9~25字符)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16);
}
else//32位加密
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
}
}
#endregion
#region 7、将一个控的内容Render后生成一个字符串
/// <summary>
/// 将一个控的内容Render后生成一个字符串
/// </summary>
/// <param name="ctl"> 用户控件ID</param>
/// <returns></returns>
public static string GetControlRender(System.Web.UI.Control ctl)
{
TextWriter tempWriter = new StringWriter();
ctl.RenderControl(new HtmlTextWriter(tempWriter));
return tempWriter.ToString();
}
#endregion
#region 8、初始化文件夹
/// <summary>
/// 初始化文件夹信息:检查文件夹是否存在,如果文件夹不存在,则建立。
/// </summary>
/// <param name="path">文件夹相对路径</param>
/// <returns>返回文件夹物理路径</returns>
public static string InitFolderPath(string path)
{
//string physicsPath = HttpContext.Current.Server.MapPath(path);
//
string physicsPath = path;
if (!Directory.Exists(physicsPath))
{
Directory.CreateDirectory(physicsPath);
}
return physicsPath;
}
#endregion
#region 9、加密/解密方法:(对称加密:简单方法)
/// <summary>
/// 加密/解密密钥
/// </summary>
public static string Key
{
get
{
return "123456";
}
}
/// <summary>
/// 加密
/// </summary>
/// <param name="Text"></param>
/// <returns></returns>
public static string Encrypt(string Text)
{
return Encrypt(Text, Key);
}
/// <summary>
/// 加密数据
/// </summary>
/// <param name="Text"></param>
/// <param name="sKey">密钥</param>
/// <returns></returns>
public static string Encrypt(string Text, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray;
inputByteArray = Encoding.Default.GetBytes(Text);
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}
/// <summary>
/// 解密
/// </summary>
/// <param name="Text"></param>
/// <returns></returns>
public static string Decrypt(string Text)
{
return Decrypt(Text, Key);
}
/// <summary>
/// 解密数据
/// </summary>
/// <param name="Text"></param>
/// <param name="sKey">密钥</param>
/// <returns></returns>
public static string Decrypt(string Text, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
int len;
len = Text.Length / 2;
byte[] inputByteArray = new byte[len];
int x, i;
for (x = 0; x < len; x++)
{
i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Encoding.Default.GetString(ms.ToArray());
}
#endregion
#region 10.生成验证码
/// <summary>
/// 生成验证码
/// </summary>
/// <param name="VNum"></param>
public static void ValidateCode(string VNum)
{
Bitmap Img = null;
Graphics g = null;
MemoryStream ms = null;
int gheight = VNum.Length * 15;
Img = new Bitmap(gheight, 25);
g = Graphics.FromImage(Img);
//背景颜色
g.Clear(Color.White);
//文字字体
Font f = new Font("宋体", 14);
//文字颜色
SolidBrush s = new SolidBrush(Color.Blue);
g.DrawString(VNum, f, s, 3, 3);
ms = new MemoryStream();
Img.Save(ms, ImageFormat.Jpeg);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ContentType = "image/Jpeg";
System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
System.Web.HttpContext.Current.Response.End();
}
#endregion
}
#endregion
}
.Net 开发中的一些可参考公用方法 C#
最新推荐文章于 2022-10-24 16:11:35 发布