ASP.NET 인증 코드(3 가지)

6853 단어 ASP.NET인증번호
일상생활 에서 우 리 는 사 이 트 를 사용 할 때 인증 코드 를 만 나 는데 왜 인증 코드 를 사용 해 야 하 는 지 생각해 본 적 이 있 습 니까?
그 실험 증 코드 의 역할 은 악의 적 으로 비밀 번 호 를 해독 하고 표를 긁 으 며 포럼 에 물 을 붓 고 페이지 를 긁 는 것 을 방지 하 는 것 이다.어떤 해커 가 특정한 등록 사용자 에 게 특정한 프로그램 폭력 으로 해결 하 는 방식 으로 끊 임 없 는 로그 인 시 도 를 하 는 것 을 효과적으로 방지 하 다.오늘 은 ASP.NET 의 세 가지 인증 코드 를 공유 하 겠 습 니 다.
1.GSC_웹 콘 트 롤 라 이브 러 리 는 인터넷 에서 찾 은 컨트롤 로 아주 좋 습 니 다.하지만 효과 가 그다지 좋 지 않다.
)사용 하기 쉽 지만 모든 속성 을 컨트롤 처럼 설정 할 수 있 지만 가용성 이 높 지 않 습 니 다.사용 자 는 사용자 정의 가 불가능 하고 인증 코드 의 효과 가 좋 지 않 은 것 같 습 니 다.
효과:

2.한 페이지 로 그림 을 만 들 고 다른 페이지 에서 호출 합 니 다.인증 코드 는 쿠키 에 저장 하고 호출 할 때 쿠키 를 가 져 와 비교 검증 합 니 다.이 사용 자 는 자신의 취향 에 따라 효과 와 인증 코드 의 길 이 를 변경 할 수 있 습 니 다.
효과 그림:

CheckCode.aspx 코드 는 다음 과 같 습 니 다.

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;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

public partial class Tools_CheckCode : 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();

  for (int i = 0; i < 5; i++)
  {
   number = random.Next();

   if (number % 2 == 0)
    code = (char)('0' + (char)(number % 10));
   else
    code = (char)('A' + (char)(number % 26));

   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.GreenYellow), x1, y1, x2, y2);
   }

   Font font = new System.Drawing.Font("Verdana", 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 < 80; 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.Red), 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();
  }
 }


}
그리고 사용 할 페이지 참조:
UseCheckCode.aspx

<img src="Tools/CheckCode.aspx" alt="   " style="width: 60px; height: 24px" />
3.웹 handler 로 그림 을 생 성 합 니 다.이것 은 사실 앞의 뜻 과 크게 다 르 지 않 고 호출 방법 도 기본적으로 2 와 같 습 니 다.다른 것 은 인증 코드 가 Session 에 저 장 된 것 입 니 다.학습 에 참고 하도록 제공 하 다.
효과 도 는 다음 과 같다.

ValidateImageHandler.ashx

%@ WebHandler Language="C#" Class="ValidateImageHandler" %>

using System;
using System.Web;
using System.Web.SessionState;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;

/// <summary>
/// ValidateImageHandler          
/// </summary>
public class ValidateImageHandler : IHttpHandler, IRequiresSessionState
{
 int intLength = 5;    //  
 string strIdentify = "Identify"; //        ,     Session 
 public ValidateImageHandler()
 {  
 }

 /// <summary>
 ///           
 /// </summary>
 /// <param name="hc"></param>
 public void ProcessRequest(HttpContext hc)
 {
  //         
  hc.Response.ContentType = "image/gif";
  
  Bitmap b = new Bitmap(200, 60);
  Graphics g = Graphics.FromImage(b);
  g.FillRectangle(new SolidBrush(Color.YellowGreen), 0, 0, 200, 60);
  Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
  Random r = new Random();

  //          
  string strLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
  StringBuilder s = new StringBuilder();
  
  //               
  for (int i = 0; i < intLength; i++)
  {
   s.Append(strLetters.Substring(r.Next(0, strLetters.Length - 1), 1));
   g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.Blue), i * 38, r.Next(0, 15));
  }

  //      
  Pen pen = new Pen(new SolidBrush(Color.Blue), 2);
  for (int i = 0; i < 10; i++)
  {
   g.DrawLine(pen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
  }
  b.Save(hc.Response.OutputStream, ImageFormat.Gif);
  hc.Session[strIdentify] = s.ToString(); //    Session ,           
  hc.Response.End();
 
 }
 
 /// <summary>
 ///                  (        )
 /// </summary>
 public bool IsReusable
 {
  get
  {
   return true;
  }
 }
}
이상 은 ASP.NET 3 인증 코드 로 각각 장단 점 이 있 으 니 서로 다른 인증 코드 의 기능 을 능숙 하 게 구현 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기