基于ASP.NET的漢字驗(yàn)證碼的研究與實(shí)現(xiàn)_第1頁(yè)
基于ASP.NET的漢字驗(yàn)證碼的研究與實(shí)現(xiàn)_第2頁(yè)
基于ASP.NET的漢字驗(yàn)證碼的研究與實(shí)現(xiàn)_第3頁(yè)
基于ASP.NET的漢字驗(yàn)證碼的研究與實(shí)現(xiàn)_第4頁(yè)
基于ASP.NET的漢字驗(yàn)證碼的研究與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于ASP.NET的漢字驗(yàn)證碼的研究與實(shí)現(xiàn)隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,人類社會(huì)得以實(shí)現(xiàn)了許多原本不可能的事情,例如快速的信息傳播、云計(jì)算、人工智能等。但是,對(duì)于計(jì)算機(jī)來(lái)說(shuō),很多事情卻比人類要困難,例如識(shí)別圖片中的內(nèi)容。因此,人們開發(fā)了一種叫做驗(yàn)證碼的技術(shù),用來(lái)防止計(jì)算機(jī)自動(dòng)化程序?qū)ο到y(tǒng)進(jìn)行攻擊。驗(yàn)證碼,即CompletelyAutomatedPublicTuringtesttotellComputersandHumansApart,全自動(dòng)區(qū)分計(jì)算機(jī)和人類的圖靈測(cè)試。本篇文章將涵蓋ASP.NET平臺(tái)下漢字驗(yàn)證碼的研究與實(shí)現(xiàn)。

一、漢字驗(yàn)證碼的優(yōu)劣勢(shì)

目前市面上常用的驗(yàn)證碼主要有幾種:數(shù)字驗(yàn)證碼、字母驗(yàn)證碼、漢字驗(yàn)證碼、圖形驗(yàn)證碼、滑動(dòng)驗(yàn)證碼等。相比于其他驗(yàn)證碼,漢字驗(yàn)證碼具有以下優(yōu)劣勢(shì)。

優(yōu)勢(shì):

1.難度較高。數(shù)字、字母及圖形驗(yàn)證碼的實(shí)現(xiàn)較為簡(jiǎn)單,通過(guò)簡(jiǎn)單的算法就能夠破解,而漢字驗(yàn)證碼的實(shí)現(xiàn)難度較大,需要用到一定的自然語(yǔ)言處理算法,因此極大程度上增加了破解難度。

2.適應(yīng)性強(qiáng)。數(shù)字、字母驗(yàn)證碼在不同文化背景下難以識(shí)別,而漢字驗(yàn)證碼則在中國(guó)文化背景下自然而然地適應(yīng)到了用戶需求。

3.良好的用戶體驗(yàn)。漢字驗(yàn)證碼的圖案多樣性較大,同時(shí)也與中國(guó)文化特征相關(guān),能夠突顯對(duì)用戶的尊重和重視。

劣勢(shì):

1.語(yǔ)境相關(guān)。漢字驗(yàn)證碼需要用戶對(duì)漢字有足夠的識(shí)別能力,并且還需要對(duì)語(yǔ)境有一定的了解,這不可避免地增加了用戶的識(shí)別難度。

2.難以擴(kuò)展。相比于字母和數(shù)字,漢字?jǐn)?shù)量較少,因此漢字驗(yàn)證碼難于擴(kuò)展。

二、漢字驗(yàn)證碼的實(shí)現(xiàn)

漢字驗(yàn)證碼的實(shí)現(xiàn)需要用到自然語(yǔ)言處理相關(guān)的技術(shù),因此對(duì)于開發(fā)者的技術(shù)能力有著較高的要求。本文將介紹基于ASP.NET平臺(tái)下漢字驗(yàn)證碼的實(shí)現(xiàn)步驟。

1.構(gòu)建驗(yàn)證碼圖片

首先需要生成漢字驗(yàn)證碼的圖片。代碼如下:

```

Bitmapbmp=newBitmap(width,height);

Graphicsg=Graphics.FromImage(bmp);

g.Clear(Color.White);

Randomrnd=newRandom();

//隨機(jī)生成四個(gè)漢字

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

{

char[]chr=newchar[1];

chr[0]=(char)(rnd.Next(0x4e00,0x9fa6));

stringstr=newstring(chr);

PointFpoint=newPointF(i*25,0);

g.DrawString(str,font,Brushes.Black,point);

}

//添加干擾線

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

{

Pointp1=newPoint(rnd.Next(width),rnd.Next(height));

Pointp2=newPoint(rnd.Next(width),rnd.Next(height));

g.DrawLine(newPen(Color.Black),p1,p2);

}

//添加噪點(diǎn)

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

{

for(intj=0;j<height;j++)

{

if(i%15==0&&j%15==0)

{

if(rnd.Next(2)==0)

{

bmp.SetPixel(i,j,Color.FromArgb(rnd.Next(0,256),rnd.Next(0,256),rnd.Next(0,256)));

}

}

}

}

```

2.將驗(yàn)證碼信息存儲(chǔ)到Session中

為了驗(yàn)證用戶輸入的驗(yàn)證碼是否正確,需要將驗(yàn)證碼信息存儲(chǔ)到Session中。代碼如下:

```

Session["Code"]=code;

```

3.編寫驗(yàn)證碼驗(yàn)證代碼

當(dāng)用戶提交表單時(shí),需要驗(yàn)證用戶輸入的驗(yàn)證碼是否正確。代碼如下:

```

//獲取用戶輸入的驗(yàn)證碼

stringinputCode=txtCode.Text;

//獲取Session中的驗(yàn)證碼

stringsessionCode=Session["Code"]asstring;

//比較用戶輸入的驗(yàn)證碼和Session中的驗(yàn)證碼是否一致

if(inputCode.ToLower()!=sessionCode.ToLower())

{

Response.Write("<script>alert('驗(yàn)證碼錯(cuò)誤');</script>");

return;

}

```

三、漢字驗(yàn)證碼的優(yōu)化

上述漢字驗(yàn)證碼實(shí)現(xiàn)雖然已經(jīng)可以滿足基本需求,但是仍然可以進(jìn)行優(yōu)化,提高驗(yàn)證碼的安全性和用戶體驗(yàn)。

1.增加曲線干擾線

除了直線干擾線外,還可以增加曲線干擾線。代碼如下:

```

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

{

PointFp1=newPointF(rnd.Next(width),rnd.Next(height));

PointFp2=newPointF(rnd.Next(width),rnd.Next(height));

PointFp3=newPointF(rnd.Next(width),rnd.Next(height));

PointFp4=newPointF(rnd.Next(width),rnd.Next(height));

PointF[]points=newPointF[]{p1,p2,p3,p4};

g.DrawBeziers(newPen(Color.Black),points);

}

```

2.增加弧形干擾線

弧形干擾線會(huì)比曲線干擾線更加難以破解。代碼如下:

```

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

{

intx=rnd.Next(width);

inty=rnd.Next(height);

intw=rnd.Next(width-x);

inth=rnd.Next(height-y);

intstart=rnd.Next(360);

intsweep=rnd.Next(360);

g.DrawArc(newPen(Color.Black),x,y,w,h,start,sweep);

}

```

3.增加旋轉(zhuǎn)角度

增加旋轉(zhuǎn)角度可以進(jìn)一步增加驗(yàn)證碼的難度。代碼如下:

```

//隨機(jī)旋轉(zhuǎn)角度

Matrixm=newMatrix();

m.Rotate(rnd.Next(-45,45));

g.Transform=m;

//繪制漢字

char[]chr=newchar[1];

chr[0]=(char)(rnd.Next(0x4e00,0x9fa6));

stringstr=newstring(chr);

PointFpoint=newPointF(i*25,0);

g.DrawString(str,font,Brushes.Black,point);

//重置旋轉(zhuǎn)角度

m.Rotate(-m.GetAngle(m.Elements[0],m.Elements[1]));

g.Transform=m;

```

4.增加漢字顏色隨機(jī)化

增加漢字顏色的隨機(jī)化可以增加驗(yàn)證碼的多樣性。代碼如下:

```

//隨機(jī)漢字顏色

Colorcolor=Color.FromArgb(rnd.Next(0,256),rnd.Next(0,256),rnd.Next(0,256));

g.DrawString(str,font,newSolidBrush(color),point);

```

5.優(yōu)化用戶體驗(yàn)

為了增加用戶體驗(yàn),可以增加點(diǎn)擊圖片生成新驗(yàn)證碼的功能。代碼如下:

```

//給圖片增加點(diǎn)擊事件

imgCode.Attributes.Add("onclick","this.src=\"getCode.aspx\"+Math.random();");

```

四、總結(jié)

本文介紹了基于ASP.NET平臺(tái)下漢字驗(yàn)證碼的研究與實(shí)現(xiàn),同時(shí)也對(duì)漢字驗(yàn)證碼的優(yōu)劣勢(shì)、實(shí)現(xiàn)方法進(jìn)行了介紹。在驗(yàn)證碼的設(shè)計(jì)中,同時(shí)也探討了如何優(yōu)化驗(yàn)證碼

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論