이제 많은 웹페이지에서 로그인할 때 임의의 이미지를 사용하는데, 이는 해커의 악의적인 공격을 방지하는 간단하고 효과적인 방법입니다. 오늘 인터넷에서 몇 가지 정보를 읽고 생성 원리를 이해했습니다. 샘플에서 임의의 문자열을 가져와서 임의의 문자열을 세션에 저장하고 비트맵 형식으로 임의의 코드 그림을 형성합니다.
성취하다:
네임스페이스를 추가합니다
.
System.드로잉.이미징 사용;
System.드로잉.드로잉2D 사용;
페이지 코드를 생성합니다
.
System.Data 사용;
System.Configuration 사용;
System.Collections 사용;
System.Web 사용;
System.Web.Security 사용;
System.Web.UI 사용;
System.Web.UI.WebControls 사용;
System.Web.UI.WebControls.WebParts 사용;
System.Web.UI.HtmlControls 사용;
System.드로잉 사용;
System.드로잉.이미징 사용;
System.드로잉.드로잉2D 공용 부분 클래스 getRandImg 사용
: System.Web.UI.Page
{
protected void Page_Load(개체 전송자, EventArgs e)
{
//임의의 코드 그림 생성
SetValidateCode();
//생성된 페이지는 캐시에 저장되지 않습니다.
Response.Cache.SetNoStore();
}
//인증코드 설정
개인 무효 SetValidateCode()
{
//새 비트맵 생성
비트맵 newBitmap = 새 비트맵(
71,
스물셋,
PixelFormat.Format32bppArgb
);
//비트맵에서 그리기 화면을 가져옵니다.
그래픽 g = Graphics.FromImage(newBitmap);
//난수 생성기
무작위 r = 새로운 무작위();
//그리기 화면 지우기
g.Clear(색상.흰색);
//화면 선 간섭 그리기
for (int i = 0; i < 50; i++)
{
int x1 = r.Next(newBitmap.Width);
int x2 = r.Next(newBitmap.Width);
int y1 = r.Next(newBitmap.Height);
int y2 = r.Next(newBitmap.Height);
g.DrawLine(새 펜(
Color.FromArgb(r.Next())),
x1,
y1,
x2,
y2
);
}
//화면 점 간섭 그리기
for (int i = 0; i < 100; i++)
{
int x = r.Next(newBitmap.Width);
int y = r.Next(newBitmap.Height);
newBitmap.SetPixel(
엑스,
와이,
Color.FromArgb(r.Next())
);
}
//임의의 문자열(5자리 길이)을 얻습니다.
문자열 값 = 생성Random(5);
//세션에 임의의 문자열 할당
세션["RandCode"] = 값;
//이미지 표시 글꼴 스타일 정의
글꼴 글꼴 = 새 글꼴(
"아리알",
14,
글꼴 스타일.Bold
);
무작위 rr = 새로운 무작위();
int yy = rr.Next(1, 4);
//이미지 브러시를 표시하기 위한 임의의 문자열을 정의합니다.
LinearGradientBrush 브러시 = 새로운 LinearGradientBrush(
새로운 직사각형(0, 0, 71, 23),
색상.빨간색,
색상.블루,
1.2f,
진실
);
g.DrawString(value, 글꼴, 브러시, 2, yy);
g.DrawRectangle(새 펜(
색상.실버),
0,
0,
70,
스물 둘
);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
newBitmap.Save(ms, ImageFormat.Gif);
//출력 그림
응답.ClearContent();
Response.ContentType = "이미지/gif";
Response.BinaryWrite(ms.ToArray());
}
//상수 집합
개인 정적 char[] 상수 ={
'0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j',
'k','l','m','n','o','p','q','r','s','t',
'u','v','w','x','y','z'
};
//임의의 문자열 생성
공개 정적 문자열 생성Random(int 길이)
{
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(36);
무작위 rd = 새로운 무작위();
for (int i = 0; i < 길이; i++)
{
newRandom.Append(constant[rd.Next(36)]);
}
newRandom.ToString()을 반환합니다.
}
}
임의의 이미지를 사용하는 페이지의 경우 IMAGE 컨트롤은 다음과 같이 작성됩니다.
샘플 코드: http://www.cnblogs .com /heekui/archive/2007/01/06/613609.html