加入收藏 | 设为首页 | 会员中心 | 我要投稿 百科站长网 (https://www.baikewang.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

Web应用验证码方面总结(ASP.NET版)

发布时间:2022-11-28 14:58:33 所属栏目:Asp教程 来源:
导读:  目录

  1 验证码在Web应用上的作用

  随着互联网的发展,上网冲浪的人越来越多。在巨大的商机面前,为互联网提供增值服务的机构与日剧增。在这些服务之中,有一大部分需要用户首先注册、登录站点之后
  目录
 
  1 验证码在Web应用上的作用
 
  随着互联网的发展,上网冲浪的人越来越多。在巨大的商机面前,为互联网提供增值服务的机构与日剧增。在这些服务之中,有一大部分需要用户首先注册、登录站点之后,才可以享受它提供的服务。现在存在这样一种情况,别有用心的人使用编写的程序,大量的重复注册某一个站点(免费的),这使这个站点产生了大量无用的用户占用了服务器的存储资源。类似的情况还有很多,他们的共同点——就是使用自动的程序(比人手动快许多)向站点提供巨量的对这个站点毫无价值、甚至于有害的信息,影响站点正常的经营活动或是谋取私利。
 
  防止这种现象,是验证码出现的主要原因。他在页面上显示出一串信息asp验证码,并要求用户作出正确的回应,如果做出的回应正确,用户才能继续或完成希望的操作。验证码要完成的就是防止机器程序能够自动的识别验证码的内容,同时要保证用户能够识别出来。
 
  2 验证码示例 2.1
 
  2.2 mail.qq.com

  2.3
 
  2.4 mail.gmail.cn
 
  2.5 回答问题的验证码
 
  验证码是一个问题,如1+1,要求用户回答问题。
 
  3 验证码的识别技术
 
  识别技术指,同样使用程序,自动的识别验证码的内容。
 
  3.1 对比库
 
  做法就是建立一个数据库,存储所有字符的特征资料。在识别时读取页面上的图像,之后同特征库进行对比,从而识别验证码。
 
  3.2 程序计算
 
  读取验证码的图像,搜集其中的像素信息,之后使用复杂的算法,排除干扰信息,计算出字符的内容。
 
  3 验证码在ASP.NET下的实现
 
  使用.NET Framework的GDI+,绘制一个图像是比较常用的方法。
 
  主要涉及的内容:1 随机。产生的验证码内容、产生的验证码的颜色、三验证码在图像中出现的位置、干扰因素出现的位置,全部随机。2 干扰因素。为防止验证码被不明程序自动识别,要在图像中加入干扰因素阻扰程序的识别。
 
  下面是一个较简单的例子,供参考(使用GDI+):
 
  这是一个ASP.NET页面的隐藏代码,使用它只需在另一个页面中设置一个Image控件,将他的src属性设置为这个页面即可。
 
  using System;
 
  using System.Data;
 
  using System.Configuration;
 
  using System.Collections;
 
  using System.Web;
 
  using System.Web.Security;
 
  using System.Web.UI;
 
  using System.Web.UI.WebControls;
 
  using System.Web.UI.WebControls.WebParts;
 
  using System.Web.UI.HtmlControls;
 
  using System.Drawing;
 
  public partial class GenerateValidPicture : System.Web.UI.Page
 
  {
 
  protected void Page_Load(object sender, EventArgs e)
 
  {
 
  this.CreateCheckCodeImage(GenerateCheckCode());
 
  }
 
  private string GenerateCheckCode()
 
  {
 
  int number;
 
  char code;
 
  string checkCode = String.Empty;
 
  System.Random random = new Random();
 
  //generate five length string constitute of digit and letter.
 
  for (int i = 0; i < 5; i++)
 
  {
 
  number = random.Next(); //generate a radom integer.
 
  if (number % 2 == 0)
 
  code = (char)('0' + (char)(number % 10)); //generate a digit char.
 
  else
 
  code = (char)('A' + (char)(number % 26)); //generate a letter char.
 
  checkCode += code.ToString();
 
  }
 
  Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
 
  return checkCode;
 
  }
 
  private void CreateCheckCodeImage(string checkCode)
 
  {
 
  if (checkCode == null || checkCode.Trim() == String.Empty)
 
  return;
 
  System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
 
  Graphics g = Graphics.FromImage(image);
 
  try
 
  {
 
  //生成随机生成器
 
  Random random = new Random();
 
  //清空图片背景色
 
  g.Clear(Color.White);
 
  //画图片的背景噪音线
 
  for (int i = 0; i < 25; i++)
 
  {
 
  int x1 = random.Next(image.Width);
 
  int x2 = random.Next(image.Width);
 
  int y1 = random.Next(image.Height);
 
  int y2 = random.Next(image.Height);
 
  g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
 
  }
 
  Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
 
  System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
 
  g.DrawString(checkCode, font, brush, 2, 2);
 
  //画图片的前景噪音点
 
  for (int i = 0; i < 100; i++)
 
  {
 
  int x = random.Next(image.Width);
 
  int y = random.Next(image.Height);
 
  image.SetPixel(x, y, Color.FromArgb(random.Next()));
 
  }
 
  //画图片的边框线
 
  g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
 
  System.IO.MemoryStream ms = new System.IO.MemoryStream();
 
  image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
 
  Response.ClearContent();
 
  Response.ContentType = "image/Gif";
 
  Response.BinaryWrite(ms.ToArray());
 
  }
 
  finally
 
  {
 
  g.Dispose();
 
  image.Dispose();
 
  }
 
  }
 
  }
 

(编辑:百科站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!