首頁 後端開發 C#.Net教程 ASP.NET圖形驗證碼產生實踐

ASP.NET圖形驗證碼產生實踐

Apr 28, 2020 pm 01:12 PM
asp.net 驗證碼

為什麼要使用圖形驗證碼

為了防止攻擊者編寫程式重複提交表單,為其他使用者和網站運行製造麻煩,所以在提交表單之前一般需要使用圖形驗證碼進行驗證,確認提交操作是人為操作,而非機器批量操作。

原理剖析

在產生圖形驗證碼時,主要應用兩方面的技術:

1、產生隨機數或字母

2、將產生的隨機數字或隨機字母轉換成圖片格式並在圖片上加入雜訊並顯示出來。

產生方法:

1、前端控制項程式碼

<asp:TextBox ID="txtValidateNum" runat="server" Width="98px"></asp:TextBox>
<asp:Image ID="Image1" runat="server" Height="22px" Width="58px" ImageUrl="~ValidateNum.aspx"/>请输入图片中验证码!
登入後複製

2、ValidateNum.aspx頁處理步驟

(1)隨機產生一個長度為N的隨機字串,N的值可由開發人員自行設定。該字串包含數字,字母等。

(2) 將隨機產生的字串建立成圖片並顯示。

(3) 儲存驗證碼

首先在ValidateNum .aspx.cs檔案中建立一個CreateRandomNum(int n)方法,隨機產生一個長度為n的隨機字串。為了避免產生重複的隨機數,將透過變數記錄隨機數結果,如果出現於上次隨機數相同的數值,則呼叫方法本身,以確保產生不同的隨機數。程式碼如下:

//生成随机字符串
private string CreateRandomNum (int n)
{
    string allChar = "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";
    string[] allCharArray = allChar.Split(&#39;,&#39;);//拆分成数组
    string randomNum = "";
    int temp = 1;
    Random rand = new Random();
    for(int i = 0;i < n;i++)
    {
        if(temp != -1)
        {
            rand = new Random(i * temp *((int)DateTime.Now.Ticks));
        }
        int t = rand.Next(35);
        if(temp == t)
        {
            return CreateRandomNum(n);
        }
        temp = t;
        randomNum += allCharArray[i];
    }
    return randomNum;
}
登入後複製

然後建立CreateImage(string validateNum)方法基於產生的隨機字串,進一步產生圖形碼,為了進一步保證安全性,為圖形驗證碼加一些幹擾色,如隨機背景花紋、文字處理等。程式碼如下:

//生成图片
private void CreateImage(string validateNum)
{
    if(validateNum == null || validateNum.Trim() == String.Empty)
        return;
    //生成Bitmap图像
    System.Drawing.Bitmap image = new System.Drawing.Bitmap(validateNum.Length * 12 + 10,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(validateNum,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();
    }
}
登入後複製

最後,在頁面載入事件Page_Load中,建立並顯示驗證碼字串的圖片,將驗證字串儲存在Session裡。

protected void Page_Load(object sender,EventArgs e)
{
    if(!IsPostBack)
    {
        string validateNum = CreateRandomNum(4);//生成4位随机字符串
        CreateImage(validateNum);//将随机字符串绘制成图片
        Session["ValidateNum"] = validateNum;  //将随机字符串保存在Session中
    }
}
登入後複製

至此,一個簡單的圖像驗證碼生成演算法已經寫完,當然大家可以在這個基礎上增加更加豐富的安全設置,比如Session的過期時間等。

以上是ASP.NET圖形驗證碼產生實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Google瀏覽器不顯示驗證碼圖片怎麼辦?chrome瀏覽器不顯示驗證碼? Google瀏覽器不顯示驗證碼圖片怎麼辦?chrome瀏覽器不顯示驗證碼? Mar 13, 2024 pm 08:55 PM

谷歌瀏覽器不顯示驗證碼圖片怎麼辦?在使用Google瀏覽器登入網頁有時候需要驗證碼驗證。部分使用者在使用圖片驗證碼的時候發現Google瀏覽器無法正常顯示圖片的內容。這該怎麼辦呢?下面小編帶來Google瀏覽器驗證碼不顯示處理方法介紹,希望對大家有幫助!  方法介紹  1、進入軟體,點選右上角的「更多」按鈕,選擇下方選項清單中的「設定」進入。  2、進入新介面後,點選左側的「隱私設定與安全性」選項。  3、接著點擊右側中的「網站設定&rdquo

虛擬號碼可以接收驗證碼嗎 虛擬號碼可以接收驗證碼嗎 Jan 02, 2024 am 10:22 AM

虛擬號碼可以接收驗證碼,只要註冊時填寫的手機號碼符合規定,並且能夠正常接通手機號,就可以收到簡訊驗證碼。不過,使用虛擬手機號碼要注意,部分網站不支援虛擬手機號碼註冊,因此需要選擇正規的虛擬手機號碼服務商。

PHP圖片處理案例:如何實作圖片的驗證碼功能 PHP圖片處理案例:如何實作圖片的驗證碼功能 Aug 17, 2023 pm 12:09 PM

PHP圖片處理案例:如何實現圖片的驗證碼功能隨著互聯網的快速發展,驗證碼成為了保護網站安全的重要手段之一。驗證碼是一種透過影像辨識技術來確定使用者是否為真實使用者的驗證方式。本文將介紹如何使用PHP來實現圖片的驗證碼功能,並附帶程式碼範例。簡介驗證碼是一張包含隨機字元的圖片,使用者需要輸入圖片中的字元才能通過驗證。實現驗證碼的主要過程包括產生隨機字元、繪製字元到圖片

手機為什麼收不到驗證碼 手機為什麼收不到驗證碼 Aug 17, 2023 pm 02:49 PM

手機收不到驗證碼是網路問題、手機設定問題、手機電信業者問題和個人設定問題導致的。詳情介紹:1、網路問題,手機所處的網路環境不穩定或訊號弱,就有可能導致驗證碼無法及時送達;2、手機設定問題,不小心將手機的簡訊或語音功能關閉,或將驗證碼的發送號碼加入黑名單中,導致驗證碼無法正常收到;3、手機電信業者問題,手機業者可能會故障或維護,導致驗證碼無法及時送達等等。

驗證碼攔不住機器人了!谷歌AI已能精準辨識模糊文字,GPT-4則裝瞎求人幫忙 驗證碼攔不住機器人了!谷歌AI已能精準辨識模糊文字,GPT-4則裝瞎求人幫忙 Apr 12, 2023 am 09:46 AM

「最煩登網站時各種奇奇怪怪(甚至變態)的驗證碼了。」現在,有一個好消息和一個壞消息。好消息就是:AI可以幫你代勞這件事了。不信你瞧,以下是三張辨識難度依序遞增的真實案例:而這些是一個名為「Pix2Struct」的模型給出的答案:全部準確無誤、一字不差有沒有?有網友感嘆:確定,準確度比我強。所以可不可以做成瀏覽器插件? ?不錯,有人表示:別看這幾個案例相比還算簡單,但凡微調一下,我都不敢想像其效果有多厲害了。所以,壞消息就是──驗證碼馬上就要攔不住機器人了! (危險危險危險…)如何做到? Pix2St

PHP開髮指南:實作驗證碼登入 PHP開髮指南:實作驗證碼登入 Jul 01, 2023 am 09:27 AM

隨著網路的發展和智慧型手機的普及,驗證碼登入功能被越來越多的網站和應用程式採用。驗證碼登入是一種透過輸入正確的驗證碼來驗證使用者身分的登入方式,以提高安全性和防止惡意攻擊。在PHP開發中,實作簡單的驗證碼登入功能並不複雜,可以透過以下步驟來完成。建立資料庫表首先,我們需要在資料庫中建立一個用於儲存驗證碼資訊的表。表格結構可以包含以下欄位:id:自增主鍵phon

如何使用PHP建立驗證碼圖片? 如何使用PHP建立驗證碼圖片? Sep 13, 2023 am 11:40 AM

如何使用PHP建立驗證碼圖片?驗證碼(CAPTCHA)是一種常用的驗證使用者是否為人而非機器的方法。在網站上,我們經常會看到驗證碼圖片,要求使用者輸入圖片上顯示的隨機字元或數字,以完成登入、註冊、評論等操作。本文將介紹如何使用PHP建立驗證碼圖片,並提供具體的程式碼範例。一、PHPGD庫要建立驗證碼圖片,我們需要使用PHP的GD庫。 GD庫是用來處理影像的擴

用OCR技術,自動辨識各種驗證碼,工具已開源 用OCR技術,自動辨識各種驗證碼,工具已開源 May 25, 2023 am 10:07 AM

今天我在跟大家分享一個OCR應用程式-ddddocr自動辨識驗證碼。前面4個d是「帶弟弟」的首拼音。 [/笑哭]。專案地址:https://github.com/sml2h3/ddddocr。使用的時候用pip指令直接安裝即可pipinstallddddocr。 OCR的核心技術包含兩面,一是目標偵測模型偵測圖片中的文字,二是文字辨識模型,將圖片中的文字轉成文字文字。第一類驗證碼最簡單,它們沒有複雜的背景圖片,所以目標偵測模型可以省略,直接將圖片送入文字辨識模型即可。識別碼如下:impor

See all articles