网站验证码的设计与实现.docx
- 文档编号:5163673
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:16
- 大小:752.64KB
网站验证码的设计与实现.docx
《网站验证码的设计与实现.docx》由会员分享,可在线阅读,更多相关《网站验证码的设计与实现.docx(16页珍藏版)》请在冰豆网上搜索。
网站验证码的设计与实现
摘要
网络对现实生活已经产生了非常大的影响,它在为我们提供了许许多多的方便和快捷的同时也为我们带来了一些问题。
例如本案例讨论的安全登录问题。
在网络中安全是一个不可忽视的问题,如果处理不好会多我们的财产和隐私带来巨大的威胁,所以不论用户还是网站的设计者都对这一问题十分重视。
例如本案例中的验证码就是为了登陆安全所特别设计的。
本次实训就是用Visual C#.NET语言和实际的操作来完成验证码的设计和实现。
目录
1课程设计目的与要求1
2设计分析…………………………………………………1
2.1软件开发过程……………………………………...1
2.2流程图……………………………………………...7
3程序代码…………………………………………………9
4调试结果………………………………………………..12
5总结……………………………………………………..14
6参考文献………………………………………………..14
1课程设计目的与要求
为了防止网站被非法登陆,网站一般通过验证码的方式,防止黑客用软件非法登陆。
验证码一般采用干扰后的图像显示,人可以识别,但机器识别有困难。
本案例用VisualC#.NET开发一个网站的验证码生成软件,并在网页上测试该软件的有效性
2设计分析
2.1软件开发过程
1)建立网站
打开VisualC#.NET2010,通过“文件”/“新建”/“网站”,打开“新建网站”对话框,选择“ASP.NET网站”,在“Web位置”选择保存网站的目录,单击确定按钮。
如图所示。
2)建立ValidateImage.ashx文件
右击解决方案名称,在弹出的菜单中选择“新建项目”,打开“添加新项”对话框,选择“一般处理程序”,文件名称改为“ValidateImage.ashx”,单击“添加”按钮。
如图所示。
3)写入代码
在ValidateImage.ashx中写入随机生成验证码的代码
如图所示。
4)建立测试验证码的链接
在解决方案上右击,选择“添加新项”,然后选择“Web窗体”模板,
名称为“loginform.aspx”,单击“添加”按钮。
如图所示。
在loginform.aspx窗体中放入多个控件。
控件说明如下:
1.Label控件,名称Label1,text属性为“用户名”;
2.TextBox控件,名称TextBox1;
3.Label控件,名称Label2,text属性为“密码”;
4.TextBox控件,名称为TextBox2;TextMode为“password”;
5.Label控件,名称为Label3,text属性为“验证码”;
6.TextBox控件,名称为TextBox3;
7.Image控件,名称为Image1,ImageUrl属性设置为ValidateImage.ashx;
8.HyperLink控件,名称为HyperLink1,Text属性为“看不清,换一张”,NavigateUrl设置
为loginform.aspx;
9.Button控件,名称为Button1,Text属性为“提交”。
如图所示。
5)调试验证码输入界面
在logoinform.aspx中选择“设计”,调整界面。
如图所示。
6)完成验证码输入成功或失败的显示
双击loginform.aspx中的提交按钮,进入按钮的响应事件处理程序。
加入检验输入验证码是否正确的代码。
如图所示。
7)在网站主页建立一个连接到登陆页面的链接
在default.aspx主页上添加loginform的链接。
在主页上加入HyperLink控件,其NavigateUrl
置为loignform.aspx。
如图所示。
2.1流程图
1)总功能图
2)验证码正确性验证
3)随机产生验证码
3程序代码
1)生成网站验证码
<%@WebHandlerLanguage="C#"Class="ValidateImage"%>
usingSystem;
usingSystem.Web;
usingSystem.IO;
usingSystem.Drawing;
publicclassValidateImage:
IHttpHandler,
System.Web.SessionState.IRequiresSessionState
{
publicvoidProcessRequest(HttpContextcontext){
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
stringvalid="";//定义随机数字
//生成包含验证码的图片
MemoryStreamms=Create(outvalid);
//存储在session中的验证码,用于验证
context.Session["validateImage"]=valid;
//置空输出流
context.Response.ClearContent();
//输出流格式
context.Response.ContentType="image/png";
//输出
context.Response.BinaryWrite(ms.ToArray());
context.Response.End();
}
publicboolIsReusable{
get{
returnfalse;
}
}
//用来产生2位数的随机数分配的方法
privatestringRndNum(intVcodeNum)
{
stringVchar="1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,m,n,p,q"+
",r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z";
//拆分到数组中
string[]VcArray=Vchar.Split(newChar[]{','});
//收集随机数
stringVNum="";
//记录最后随机值,尽量避免同一随机数
inttemp=-1;
Randomrand=newRandom();
//通过一个简单的算法,以确保不同的随机编号
for(inti=1;i { if(temp! =-1) { rand=newRandom(i*temp*unchecked((int)DateTime.Now.Ticks)); } intt=rand.Next(55); if(temp! =-1&&temp==t) { returnRndNum(VcodeNum);//如果获得随机数重复,然后递归调用 } temp=t; //随机数中位数加一 VNum+=VcArray[t]; } returnVNum; } //生成随机数,并将其写入图像文件 publicMemoryStreamCreate(outstringVNum) { VNum=RndNum(3); BitmapImg=null; Graphicsg=null; MemoryStreamms=null; System.Randomrandom=newRandom(); Color[]c={Color.Black,Color.Red,Color.DarkBlue,Color.Green, Color.Brown,Color.DarkCyan,Color.Purple}; string[]fonts={"Verdana","MicrosoftSansSerif","ComicSansMS","Arial","宋体"}; Img=newBitmap((int)VNum.Length*18,32); g=Graphics.FromImage(Img); g.Clear(Color.White); //在背景的随机位置画图 for(inti=0;i<100;i++) { intx=random.Next(Img.Width); inty=random.Next(Img.Height); g.DrawRectangle(newPen(Color.LightGray,0),x,y,1,1); } //在g中映射验证码 for(inti=0;i { intcindex=random.Next(6); intfindex=random.Next(5); //格式 Font f=newSystem.Drawing.Font(fonts[findex],15,System.Drawing.FontStyle.Regular); Brushb=newSystem.Drawing.SolidBrush(c[cindex]); intii=4; if((i+1)%2==0)//控制不同验证码字符在垂直方向上的位置 { ii=2; } g.DrawString(VNum.Substring(i,1),f,b,3+(i*12),ii); } ms=newMemoryStream(); Img.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg); g.Dispose(); Img.Dispose(); returnms; } } 2)验证验证码 protectedvoidButton1_Click(objectsender,EventArgse) { if(TextBox3.Text==Session["validateImage"].ToString()) { Response.Write("祝贺你,验证成功! "+TextBox3.Text); Response.Write("用户名为: "+TextBox1.Text); } else { Response.Write("对不起,验证失败! "+TextBox3.Text+"--->"+ Session["validateImage"]); } } 4调试结果 4.1 ASP.NET主页 4.2登陆主页 进入登陆主页面 登陆失败 登陆成功 5总结 在这一周的时间里,我通过这次的实训加强了自己掌握和理解C#原理和用法的能力,培养了自己的实际动手能力与综合设计能力,并提高了自己的技术素质。 实训一向是我比较喜欢的实践项目,因为从中学到许多东西,既体验了我们前段时间理论知识的学习效果,又锻炼了我的动手实践能力。 通过这次实训,本人在多方面都有所提高生独立工作能力,在这次设计过程中,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。 实训为我们提供了一个既动手动脑,独立参加实践的好机会,要求我们将理论知识和实际情况有机地结合起来,锻炼我们的分析问题,解决实际问题的能力,提高我们适应实际,实践的能力;它也要求我们综合运用所学的计算机网络知识来解决有一点难度的问题,从而提高了我们对知识的综合运用能力,加深对知识间的融会贯通和联系的理解。 实训是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.我今天认真的进行实训,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础. 6参考文献 [1]《网站验证码的设计与实现》开发案例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网站 验证 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)