用C#实现网站验证码的实验报告.docx

上传人:b****3 文档编号:2819340 上传时间:2022-11-15 格式:DOCX 页数:10 大小:272.77KB
下载 相关 举报
用C#实现网站验证码的实验报告.docx_第1页
第1页 / 共10页
用C#实现网站验证码的实验报告.docx_第2页
第2页 / 共10页
用C#实现网站验证码的实验报告.docx_第3页
第3页 / 共10页
用C#实现网站验证码的实验报告.docx_第4页
第4页 / 共10页
用C#实现网站验证码的实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

用C#实现网站验证码的实验报告.docx

《用C#实现网站验证码的实验报告.docx》由会员分享,可在线阅读,更多相关《用C#实现网站验证码的实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

用C#实现网站验证码的实验报告.docx

用C#实现网站验证码的实验报告

目录

1.软件设计要求和规范2

2.软件制作过程(含增加的功能)2

3.收获与体会12

4.参考文献12

 

1.软件设计要求和规范

为了防止网站被非法登陆,网站一般通过验证码的方式,防止黑客用软件非法登陆。

验证码一般采用干扰后的图像显示,人可以识别,但机器识别有困难。

本案例用VisualC#.NET开发一个网站的验证码生成软件,并在网页上测试该软件的有效性。

2.软件制作过程(含增加的功能)

1.打开VisualC#.NET2010,通过“文件”/“新建”/“网站”,打开“新建网站”对话框,如图1所示。

选择“ASP.NET网站”,在“Web位置”选择保存网站的目录,单击确定按钮。

图1新建网站

2.建立ValidateImage.ashx文件

右击解决方案名称,在弹出的菜单中选择“新建项目”,打开“添加新项”对话框,选择“一般处理程序”,文件名称改为“ValidateImage.ashx”,单击“添加”按钮。

如图2所示。

图2添加.ashx程序

 

打开ValidateImage.ashx文件,并按照下列代码输入程序。

<%@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,l,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);

Bitmaplmg=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","ComicSannsMS","Arial","宋体"};

lmg=newBitmap((int)VNum.Length*18,32);

g=Graphics.FromImage(lmg);

g.Clear(Color.White);

//在背景的随机位置画图

for(inti=0;i<100;i++)

{

intx=random.Next(lmg.Width);

inty=random.Next(lmg.Height);

g.DrawRectangle(newPen(Color.LightGray,0),x,y,1,1);

}

//在g中映射验证码

for(inti=0;i

{

intcindex=random.Next(6);

intfindex=random.Next(5);

//格式

Fontf=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();

lmg.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);

g.Dispose();

lmg.Dispose();

returnms;

}

}

 

3.建立测试验证码的链接。

在解决方案上右击,选择“添加新项”,弹出对话框如图3所示。

选择“Web窗体”模板,名称为“loginform.aspx”,单击“添加”按钮。

在loginform.aspx窗体中,按照图4所示,放入多个控件。

控件说明如下:

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属性为“提交”。

 

图3增加loginform窗体

 

4.双击loginform.aspx中的提交按钮,进入按钮的响应事件处理程序。

加入下列代码:

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"]);

}

}

 

5.在default.aspx主页上添加loginform的链接。

在主页上加入HyperLink控件,其NavigateUrl置为loignform.aspx。

如图5所示。

图5.主页中增加链接,用于登陆

附:

增加的功能:

(1)用表格定位各个控件,同时改变各控件的背景颜色,使界面更美化如图6,7所示

图6先插入表格定位使界面更加美观

 

图7使界面更美观

 

(2)验证码显示位数的增加,如图8所示

VNum=RndNum(3);VNum=RndNum(7);

(3)改变验证码背景颜色,增加验证码后不规则图形,使验证码识别难度加大,如图9所示

g.Clear(Color.White);g.Clear(Color.Gray);

intx=random.Next(Img.Width);

inty=random.Next(Img.Height);

g.DrawRectangle(newPen(Color.LightGray,0),x,1,y,1);

 

intx1=random.Next(Img.Width);

intx2=random.Next(Img.Width);

inty1=random.Next(Img.Height);

inty2=random.Next(Img.Height);

g.DrawRectangle(newPen(Color.LightGray,0),x1,x2,y1,y2);

图9增加验证码的识别难度

3.收获与体会

通过近两周的实训课程设计,我意识到自己还存在许多不足,在这次课程设计完成过程中我发现了自己的薄弱环节,并且在逐步完成任务的同时,我也渐渐解决了这些问题。

C#是一门功能非常强大的完全面向对象的语言。

借助这种语言我们不仅能完成控制台的程序,还可以结合各种控件,制作成一个有界面的真正意义上的程序。

在了解C#这门语言一段时间之后,我对C#产生了浓厚的兴趣,这更激发了我的学习热情。

学习C#知识和操作的过程困难重重,产生困难的原因是因为以前对C#的认识不够,只是表面的一些东西,还有就是对软件的不熟悉。

为了克服困难我在网上查找相关的内容,查找的相关的书籍,在同学的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1