C#封装类NET MVC WEBFORM.docx
- 文档编号:9260229
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:17
- 大小:18KB
C#封装类NET MVC WEBFORM.docx
《C#封装类NET MVC WEBFORM.docx》由会员分享,可在线阅读,更多相关《C#封装类NET MVC WEBFORM.docx(17页珍藏版)》请在冰豆网上搜索。
C#封装类NETMVCWEBFORM
C#封装类-.NETMVCWEBFORM
验证码方式
1、随机字母或者数字,纯文本验证码
这种非常容易破解,市场上有大量的现成接口或者工具,背景越复杂难度越高。
2、题库验证码
要破解这种验证码,需要人工收集题库才可以破解,可以免疫不是专门针对你一个网站的黑客,所以我偏爱这种验证码
•1+1=?
•本论坛的域名是?
•今天是星期几?
•复杂点的数学运算
但是他到底是不是就不能破解了呢?
缺点:
数量有限。
破解方式也很简单,多刷新几次,建立题库和对应的答案,用正则从网页里抓取问题,寻找匹配的答案后破解。
也有些用随机生成的数学公式,比如随机数[+-*/]随机运算符随机数=?
,小学生水平的程序员也可以搞定……
题库越多高全系数越高
3、干扰型题库验证码
将文字显示进行处理起到干扰效果,就算你有正确题库也不能轻易破解
publicvoidValidateImg()
{
VerifyCodeSugarv=newVerifyCodeSugar();
//是否随机字体颜色
v.SetIsRandomColor=true;
//随机码的旋转角度
v.SetRandomAngle=4;
//文字大小
v.SetFontSize=15;
//背景色
//v.SetBackgroundColor
//前景噪点数量
//v.SetForeNoisePointCount=3;
//v.SetFontColor=Color.Red;
//...还有更多设置不介绍了
varquestionList=newDictionary
{
{"1+1=?
","2"},
{"喜羊羊主角叫什么名字?
","喜羊羊"},
{"【我爱你】中间的那个字?
","爱"},
};
varquestionItem=v.GetQuestion();//不赋值为随机验证码例如:
1*2=?
这种
//指定验证文本
//v.SetVerifyCodeText
v.SetVerifyCodeText=questionItem.Key;
Session["VerifyCode"]=questionItem.Value;
//输出图片
v.OutputImage(System.Web.HttpContext.Current.Response);
}
2、前台设用action或者pageload页面地址,js给src更换url添加随机参数达到刷新验证码的功能
3、完整封装类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Drawing;
usingSystem.Drawing.Drawing2D;
usingSystem.Drawing.Imaging;
usingSystem.IO;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Web;
namespaceIdea.Models
{
///
///验证码类
///
publicclassVerifyCodeSugar
{
privateRandomobjRandom=newRandom();
#regionsetting
///
/////验证码长度
///
publicintSetLength=4;
///
///验证码字符串
///
publicstringSetVerifyCodeText{get;set;}
///
///是否加入小写字母
///
publicboolSetAddLowerLetter=false;
///
///是否加入大写字母
///
publicboolSetAddUpperLetter=false;
///
///字体大小
///
publicintSetFontSize=18;
///
/////字体颜色
///
publicColorSetFontColor=Color.Blue;
///
///字体类型
///
publicstringSetFontFamily="Verdana";
///
///背景色
///
publicColorSetBackgroundColor=Color.AliceBlue;
///
///前景噪点数量
///
publicintSetForeNoisePointCount=2;
///
///随机码的旋转角度
///
publicintSetRandomAngle=40;
///
///是否随机字体颜色
///
publicboolSetIsRandomColor=false;
///
///图片宽度
///
privateintSetWith
{
get
{
returnthis.SetVerifyCodeText.Length*SetFontSize;
}
}
///
///图片高度
///
privateintSetHeight
{
get
{
returnConvert.ToInt32((60.0/100)*SetFontSize+SetFontSize);
}
}
#endregion
#regionConstructorMethod
publicVerifyCodeSugar()
{
this.GetVerifyCodeText();
}
#endregion
#regionPrivateMethod
///
///得到验证码字符串
///
privatevoidGetVerifyCodeText()
{
//没有外部输入验证码时随机生成
if(String.IsNullOrEmpty(this.SetVerifyCodeText))
{
StringBuilderobjStringBuilder=newStringBuilder();
//加入数字1-9
for(inti=1;i<=9;i++)
{
objStringBuilder.Append(i.ToString());
}
//加入大写字母A-Z,不包括O
if(this.SetAddUpperLetter)
{
chartemp='';
for(inti=0;i<26;i++)
{
temp=Convert.ToChar(i+65);
//如果生成的字母不是'O'
if(!
temp.Equals('O'))
{
objStringBuilder.Append(temp);
}
}
}
//加入小写字母a-z,不包括o
if(this.SetAddLowerLetter)
{
chartemp='';
for(inti=0;i<26;i++)
{
temp=Convert.ToChar(i+97);
//如果生成的字母不是'o'
if(!
temp.Equals('o'))
{
objStringBuilder.Append(temp);
}
}
}
//生成验证码字符串
{
intindex=0;
for(inti=0;i { index=objRandom.Next(0,objStringBuilder.Length); this.SetVerifyCodeText+=objStringBuilder[index]; objStringBuilder.Remove(index,1); } } } } /// ///得到验证码图片 /// privateBitmapGetVerifyCodeImage() { Bitmapresult=null; //创建绘图 result=newBitmap(SetWith,SetHeight); using(GraphicsobjGraphics=Graphics.FromImage(result)) { objGraphics.SmoothingMode=SmoothingMode.HighQuality; //清除整个绘图面并以指定背景色填充 objGraphics.Clear(this.SetBackgroundColor); //创建画笔 using(SolidBrushobjSolidBrush=newSolidBrush(this.SetFontColor)) { this.AddForeNoisePoint(result); this.AddBackgroundNoisePoint(result,objGraphics); //文字居中 StringFormatobjStringFormat=newStringFormat(StringFormatFlags.NoClip); objStringFormat.Alignment=StringAlignment.Center; objStringFormat.LineAlignment=StringAlignment.Center; //字体样式 FontobjFont=newFont(this.SetFontFamily,objRandom.Next(this.SetFontSize-3,this.SetFontSize),FontStyle.Regular); //验证码旋转,防止机器识别 char[]chars=this.SetVerifyCodeText.ToCharArray(); for(inti=0;i { //转动的度数 floatangle=objRandom.Next(-this.SetRandomAngle,this.SetRandomAngle); objGraphics.TranslateTransform(12,12); objGraphics.RotateTransform(angle); objGraphics.DrawString(chars[i].ToString(),objFont,objSolidBrush,-2,2,objStringFormat); objGraphics.RotateTransform(-angle); objGraphics.TranslateTransform(2,-12); } } } returnresult; } /// ///添加前景噪点 /// /// privatevoidAddForeNoisePoint(BitmapobjBitmap) { for(inti=0;i { objBitmap.SetPixel(objRandom.Next(objBitmap.Width),objRandom.Next(objBitmap.Height),this.SetFontColor); } } /// ///添加背景噪点 /// /// /// privatevoidAddBackgroundNoisePoint(BitmapobjBitmap,GraphicsobjGraphics) { using(PenobjPen=newPen(Color.Azure,0)) { for(inti=0;i { objGraphics.DrawRectangle(objPen,objRandom.Next(objBitmap.Width),objRandom.Next(objBitmap.Height),1,1); } } } /// ///获取随机颜色 /// /// privateColorGetRandomColor() { RandomRandomNum_First=newRandom((int)DateTime.Now.Ticks); //对于C#的随机数,没什么好说的 System.Threading.Thread.Sleep(RandomNum_First.Next(50)); RandomRandomNum_Sencond=newRandom((int)DateTime.Now.Ticks); //为了在白色背景上显示,尽量生成深色 intint_Red=RandomNum_First.Next(256); intint_Green=RandomNum_Sencond.Next(256); intint_Blue=(int_Red+int_Green>400)? 0: 400-int_Red-int_Green; int_Blue=(int_Blue>255)? 255: int_Blue; returnColor.FromArgb(int_Red,int_Green,int_Blue); } #endregion #regionPublicMethod /// ///输出验证码图片 /// /// /// publicboolOutputImage(HttpResponseobjHttpResponse) { boolresult=false; if(this.SetIsRandomColor) { this.SetFontColor=GetRandomColor();; } using(BitmapobjBitmap=this.GetVerifyCodeImage()) { if(objBitmap! =null) { using(MemoryStreamobjMS=newMemoryStream()) { objBitmap.Save(objMS,ImageFormat.Jpeg); HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.ContentType="image/Jpeg"; HttpContext.Current.Response.BinaryWrite(objMS.ToArray()); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); result=true; } } } returnresult; } /// ///获取问题 /// /// /// publicKeyValuePair { if(questionList==null) { questionList=newDictionary varoperArray=newstring[]{"+","*","num"}; varleft=objRandom.Next(0,10); varright=objRandom.Next(0,10); varoper=operArray[objRandom.Next(0,operArray.Length)]; if(oper=="+") { stringkey=string.Format("{0}+{1}=? ",left,right); stringval=(left+right).ToString(); questionList.Add(key,val); } elseif(oper=="*") { stringkey=string.Format("{0}×{1}=? ",left,right); stringval=(left*right).ToString(); questionList.Add(key,val); } else { varnum=objRandom.Next(1000,9999);; questionList.Add(num.ToString(),num.ToString()); } } returnquestionList.ToList()[objRandom.Next(0,questionList.Count)]; } #endregion } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C#封装类 NET MVC WEBFORM C# 封装