1、用C#实现网站验证码的实验报告目 录1. 软件设计要求和规范 22. 软件制作过程(含增加的功能) 23. 收获与体会 124. 参考文献 121. 软件设计要求和规范 为了防止网站被非法登陆,网站一般通过验证码的方式,防止黑客用软件非法登陆。验证码一般采用干扰后的图像显示,人可以识别,但机器识别有困难。本案例用Visual C#.NET开发一个网站的验证码生成软件,并在网页上测试该软件的有效性。2. 软件制作过程(含增加的功能)1. 打开Visual C#.NET 2010,通过“文件”/“新建”/“网站”,打开“新建网站”对话框,如图1所示。选择“ASP.NET网站”,在“Web位置”选择
2、保存网站的目录,单击确定按钮。图1 新建网站2. 建立ValidateImage.ashx文件右击解决方案名称,在弹出的菜单中选择“新建项目”,打开“添加新项”对话框,选择“一般处理程序”,文件名称改为“ValidateImage.ashx”,单击“添加”按钮。如图2所示。图2 添加.ashx程序打开ValidateImage.ashx文件,并按照下列代码输入程序。using System;using System.Web;using System.IO ;using System.Drawing;public class ValidateImage : IHttpHandler,System
3、.Web.SessionState.IRequiresSessionState public void ProcessRequest (HttpContext context) context.Response.Cache.SetCacheability(HttpCacheability.NoCache); string valid=;/定义随机数字 /生成包含验证码的图片 MemoryStream ms=Create(out valid); /存储在session中的验证码,用于验证 context.SessionvalidateImage=valid; /置空输出流 context.Res
4、ponse.ClearContent(); /输出流格式 context.Response.ContentType = image/png; /输出 context.Response.BinaryWrite(ms.ToArray(); context.Response.End(); public bool IsReusable get return false; /用来产生2位数的随机分配的方法 private string RndNum(int VcodeNum) string Vchar=1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,q+,
5、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(new Char , ); / / 收集随机数 string VNum = ; /记录最后的随机数,尽量避免同一随机数 int temp = -1; Random rand = new Random(); /通过一个简单的算法,以确保不同随机编号 for (int i = 1; i VcodeNum+1;i+) if (temp != -1) rand = new Random(i * te
6、mp* unchecked(int)DateTime.Now.Ticks); int t = rand.Next(55); if (temp!=-1&temp=t) return RndNum(VcodeNum); temp=t; /随机数中位数加一 VNum+=VcArrayt; return VNum; /生成随机数,并将其写入图像文件 public MemoryStream Create(out string VNum) VNum=RndNum(3); Bitmap lmg=null; Graphics g=null; MemoryStream ms=null; System.Rando
7、m random=new Random(); Color c =Color.Black,Color.Red,Color.DarkBlue,Color.Green, Color.Brown,Color.DarkCyan,Color.Purple; Stringfonts=Verdana,Microsoft Sans Serif,Comic Sanns MS,Arial,宋体; lmg=new Bitmap(int)VNum.Length*18,32); g=Graphics.FromImage(lmg); g.Clear(Color.White); /在背景的随机位置画图 for(int i=0
8、;i100;i+) int x=random.Next(lmg.Width); int y=random.Next(lmg.Height); g.DrawRectangle(new Pen(Color.LightGray,0),x,y,1,1); /在g中映射验证码 for(int i=0;i + SessionvalidateImage); 5. 在default.aspx主页上添加loginform的链接。在主页上加入HyperLink控件,其NavigateUrl置为loignform.aspx。如图5所示。图5. 主页中增加链接,用于登陆附:增加的功能:(1)用表格定位各个控件,同时改
9、变各控件的背景颜色,使界面更美化如图6,7所示图6 先插入表格定位使界面更加美观图7 使界面更美观(2)验证码显示位数的增加,如图8所示VNum=RndNum(3); VNum=RndNum(7);(3)改变验证码背景颜色,增加验证码后不规则图形,使验证码识别难度加大,如图9所示g.Clear(Color.White); g.Clear(Color.Gray);int x = random.Next(Img.Width);int y = random.Next(Img.Height);g.DrawRectangle(new Pen(Color.LightGray, 0), x, 1, y, 1
10、);int x1 = random.Next(Img.Width);int x2 = random.Next(Img.Width);int y1 = random.Next(Img.Height); int y2 = random.Next(Img.Height);g.DrawRectangle(new Pen(Color.LightGray, 0), x1, x2, y1, y2);图9 增加验证码的识别难度3. 收获与体会 通过近两周的实训课程设计,我意识到自己还存在许多不足,在这次课程设计完成过程中我发现了自己的薄弱环节,并且在逐步完成任务的同时,我也渐渐解决了这些问题。 C#是一门功能非常强大的完全面向对象的语言。借助这种语言我们不仅能完成控制台的程序,还可以结合各种控件,制作成一个有界面的真正意义上的程序。在了解C#这门语言一段时间之后,我对C#产生了浓厚的兴趣,这更激发了我的学习热情。学习C#知识和操作的过程困难重重,产生困难的原因是因为以前对C#的认识不够,只是表面的一些东西,还有就是对软件的不熟悉。为了克服困难我在网上查找相关的内容,查找的相关的书籍,在同学的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1