国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C#的驗(yàn)證碼的繪制

2015-06-02 12:27馬相芬
電腦知識(shí)與技術(shù) 2015年9期

馬相芬

摘要:驗(yàn)證碼技術(shù)通常使用一些線條、隨機(jī)數(shù)、符號(hào)和不規(guī)則的字符組成,借此防止一些黑客把密碼數(shù)據(jù)化或者在網(wǎng)絡(luò)上用機(jī)器人自動(dòng)注冊(cè)、登錄和灌水。為此該文介紹了一種基于C#和GDI+技術(shù)的驗(yàn)證碼的實(shí)現(xiàn)方法。

關(guān)鍵詞:驗(yàn)證碼;GDI+;隨機(jī)數(shù)

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)09-0108-02

Abstract: the verification code technology is usually used some lines, random numbers, symbols and irregular characters, to prevent some hackers password data or in the network using robots to automatically register, login and irrigation. This paper introduces a realization method of the C# and the GDI+ technology based on verification code.

Key words: authentication code; GDI+; random number

目前,很多WEB程序?yàn)榱朔乐共环ǚ肿訍阂馄平饷艽a、批量注冊(cè),以破壞網(wǎng)站的穩(wěn)定性,大都采用驗(yàn)證碼技術(shù)。所謂驗(yàn)證碼,就是把一串隨機(jī)產(chǎn)生的數(shù)字或符號(hào)生成圖片,并在圖片里加上干擾,然后由用戶連同其它表單信息,一齊提交給網(wǎng)站進(jìn)行驗(yàn)證,驗(yàn)證成功后才能使用某功能。

1 技術(shù)原理

1.1 Random類

在C#中,通過(guò)Random類生成隨機(jī)數(shù),隨機(jī)算法的起始數(shù)字是種子數(shù),在種子數(shù)的基礎(chǔ)上進(jìn)行變換,最終產(chǎn)生需要的隨機(jī)數(shù)。本文采用Random類的Next()方法(如表1所示)來(lái)返回隨機(jī)數(shù)。

1.2 GDI+繪制技術(shù)

GDI+是.NET框架中提供二維圖形、圖像處理的功能,在較早GDI版本的基礎(chǔ)上添加了新的功能并改進(jìn)了現(xiàn)有功能,為開發(fā)者提供了一組實(shí)現(xiàn)與各種設(shè)備(如顯示器、打印機(jī)等)進(jìn)行交互的庫(kù)函數(shù)。

Graphic類封裝一個(gè)GDI+繪圖圖面。Graphic對(duì)象是用于創(chuàng)建圖形圖像的對(duì)象,Graphic類的DrawString()方法用于在指定位置并且用指定的Brush和Font對(duì)象繪制指定的文本字符串。

2 實(shí)現(xiàn)過(guò)程

1) 啟動(dòng)VS 2010,新建一個(gè)C#的Windows窗體應(yīng)用程序。在窗體中添加一個(gè)Button按鈕和一個(gè)PictureBox控件,分別用于生成驗(yàn)證碼和顯示驗(yàn)證碼。

2) 實(shí)現(xiàn)代碼

(1) 生成4位由英文和數(shù)字組成的字符串

private static string CKCode()

{

int num;

char code;//存儲(chǔ)每次生成的數(shù)字或字符

string verifyCode = ""; //存儲(chǔ)隨機(jī)數(shù)

Random random = new Random();

for (int i = 1; i <= 4; i++)

{

num = random.Next();

//判斷隨機(jī)數(shù),若是偶數(shù)則存儲(chǔ)數(shù)字,若是3的倍數(shù)則存儲(chǔ)小寫字母,否則存儲(chǔ)大寫字母

if(num%2==0)

code=(char)('0'+(char)(num%10));

else if(num%5==0)

code = (char)('a' + (char)(num % 26));

else

code = (char)('A' + (char)(num % 26));

verifyCode +=" "+ code.ToString();

}

return verifyCode;

}

(2) 將CKCode方法生成的字符串轉(zhuǎn)化為Bitmap位圖添加到PictureBox控件

private static Image CodeToPict(string verifyCode)

{

if (verifyCode == null || verifyCode.Trim() =="")

return null;

Bitmap img = new Bitmap((int)Math.Ceiling((verifyCode.Length*10.1)),26);

Graphics graphics = Graphics.FromImage(img);

Random random = new Random();

graphics.Clear(Color.White);

for (int i = 1; i <= 5; i++)//繪制噪音線

{

int x1=x2 = random.Next(img.Width);

int y1=y2= random.Next(img.Height);

graphics.DrawLine(new Pen(Color.Black),x1,y1,x2,y2);

}

Font font = new Font("Times New Roman ",16,(FontStyle.Bold));

graphics.DrawString(verifyCode,font,new SolidBrush(Color.Red),2,2);

for (int i = 0; i < 140; i++)//繪制噪音點(diǎn)

{

int x = random.Next(img.Width);

int y = random.Next(img.Height);

img.SetPixel(x,y,Color.FromArgb(random.Next()));

}

graphics.DrawRectangle(new Pen(Color. Gray), 0, 0, img.Width - 1, img.Height - 1);

return img;

}

運(yùn)行效果如圖1所示。

3 結(jié)束語(yǔ)

該文采用GDI+技術(shù)和C#程序語(yǔ)言完成了驗(yàn)證碼的繪制,GDI+是對(duì)Windows操作系統(tǒng)GDI函數(shù)庫(kù)的擴(kuò)充,可以在窗體程序中產(chǎn)生很多自定義的圖形,便于開發(fā)人員展示圖形化的數(shù)據(jù)。

參考文獻(xiàn):

[1] William Stalling.密碼編碼學(xué)與網(wǎng)絡(luò)安全[M].北京:電子工業(yè)出版社,2004.

[2] 耿肇英,趙建立.C#應(yīng)用程序設(shè)計(jì)教程[M].北京:人民郵電出版社,2009.

[3] 明日科技.C#程序開發(fā)范例寶典[M].北京:人民郵電出版社,2010.

[4] 齊立波,黃俊偉.C#入門經(jīng)典[M].6版.北京:清華大學(xué)出版社,2014.