ASP.NET 2.0 制作彩色验证码

更新时间:2024-04-15 23:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、ASP.Net的验证码的作用

对于一个预防攻击的web表单来讲,验证码通常是一个常见的措施。因为如果对于一些public区域的页面内容来讲,譬如一个登录表单,如果没有必要的安全措施,很可能遭到模拟登录的暴力破解攻击,要么轻易获得特定账户的登录信息,要么给服务器增加了大量的负荷,影响正常的服务。解决的办法,一般就是在登录前给出一个随机的信息(验证码),显示在页面上,让用户填写,以确保用户是通过web页面来进行正常的登入,对于非法的非web途径登录者会看不到这个验证码从而拒绝其登录。虽然这样,往往很多攻击者会截获登录web页,从而也搜索出验证码,这样,验证保护措施也失去意义,一般情况下,我们可以通过将验证信息作为图像信息显示在web上,这样就既可以不阻碍合法用户登录,又使非法攻击者无法通过html搜索获得验证信息。这大抵上就是验证码的用途和意义了。

二、ASP.Net的验证码实现

一般传统的验证码图像一般采用一些CGI、ISAPI程序加上一些加密代码来动态生成图像,ASP大多采用COM组件实现,相当辛苦。

ASP.Net中欲实现动态验证码却相当容易,实例解说

重点列出viewImg.aspx,前台没有任何代码,在后台中需要添加以下代码: //导入所需要的包 using System.Drawing;

using System.Drawing.Imaging; using System.IO;

//然后在Load事件中添加以下代码

protected void Page_Load(object sender, EventArgs e) {

string chkCode = string.Empty;

//颜色列表,用于验证码、噪线、噪点

Color[] color ={ Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange,

Color.Brown, Color.DarkBlue };

//字体列表,用于验证码

string[] font ={ \

\

//验证码的字符集,去掉了一些容易混淆的字符

char[] character ={ ''2'', ''3'', ''4'', ''5'', ''6'', ''8'', ''9'', ''A'', ''B'', ''C'', ''D'', ''E'',

''F'', ''G'', ''H'', ''J'', ''K'', ''L'', ''M'', ''N'', ''P'', ''R'', ''S'', ''T'', ''W'', ''X'', ''Y'' };

Random rnd = new Random();

//生成验证码字符串 for (int i = 0; i < 4; i++) {

chkCode += character[rnd.Next(character.Length)]; }

//保存验证码的Cookie

HttpCookie anycookie = new HttpCookie(\

anycookie.Values.Add(\

HttpContext.Current.Response.Cookies[\

chkCode;

Bitmap bmp = new Bitmap(150, 30);

Graphics g = Graphics.FromImage(bmp);

g.Clear(Color.White);

//画噪线

for (int i = 0; i < 5; i++) {

int x1 = rnd.Next(150); int y1 = rnd.Next(30); int x2 = rnd.Next(150); int y2 = rnd.Next(30);

Color clr = color[rnd.Next(color.Length)]; g.DrawLine(new Pen(clr), x1, y1, x2, y2); }

//画验证码字符串

for (int i = 0; i < chkCode.Length; i++) {

string fnt = font[rnd.Next(font.Length)]; Font ft = new Font(fnt, 16);

Color clr = color[rnd.Next(color.Length)];

g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 20 +

20, (float)6); }

//画噪点

for (int i = 0; i < 100; i++) {

int x = rnd.Next(bmp.Width); int y = rnd.Next(bmp.Height);

Color clr = color[rnd.Next(color.Length)]; bmp.SetPixel(x, y, clr); }

//清除该页输出缓存,设置该页无缓存 Response.Buffer = true;

Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);

Response.Expires = 0;

Response.CacheControl = \

Response.AppendHeader(\

//将验证码图片写入内存流,并将其以\格式输出 MemoryStream ms = new MemoryStream();

try {

bmp.Save(ms, ImageFormat.Png); Response.ClearContent();

Response.ContentType = \ Response.BinaryWrite(ms.ToArray()); }

finally {

//显式释放资源 bmp.Dispose(); g.Dispose(); } }

添加完成后,该页面就可以生成一个彩色验证码

在需要验证的页面只需要在代码中加入

在验证时可用Request.Cookies[\获取该值进行验证。

文章出处:http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/200819/96140_2.html

本文来源:https://www.bwwdw.com/article/w04p.html

Top