Heim  >  Artikel  >  Backend-Entwicklung  >  Praxis zur Generierung von grafischem ASP.NET-Verifizierungscode

Praxis zur Generierung von grafischem ASP.NET-Verifizierungscode

Hello World!
Hello World!Original
2020-04-28 13:12:042367Durchsuche

Warum grafischen Verifizierungscode verwenden?

Um zu verhindern, dass Angreifer Programme zum wiederholten Senden von Formularen schreiben und anderen Benutzern und Website-Vorgängen Probleme bereiten, ist es im Allgemeinen erforderlich, grafische Verifizierung zu verwenden Vor dem Absenden des Formulars wird der Code überprüft, um zu bestätigen, dass es sich bei dem Absendevorgang um einen menschlichen Vorgang und nicht um einen maschinellen Batch-Vorgang handelt.

Prinzipielle Analyse

Bei der Generierung grafischer Verifizierungscodes werden hauptsächlich zwei Technologien verwendet:

1 Zufallszahlen generieren oder Buchstaben

2. Konvertieren Sie die generierten Zufallszahlen oder Zufallsbuchstaben in ein Bildformat, fügen Sie dem Bild Rauschen hinzu und zeigen Sie es an.

Generierungsmethode:

1. Front-End-Steuercode

<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-Seitenverarbeitungsschritte

( 1) Generieren Sie zufällig eine zufällige Zeichenfolge der Länge N. Der Wert von N kann vom Entwickler festgelegt werden. Die Zeichenfolge enthält Zahlen, Buchstaben usw.

(2) Erstellen Sie eine zufällig generierte Zeichenfolge in einem Bild und zeigen Sie es an.

(3) Speichern Sie den Bestätigungscode

Erstellen Sie zunächst eine CreateRandomNum(int n)-Methode in der ValidateNum .aspx.cs-Datei, um zufällig eine zufällige Zeichenfolge der Länge n zu generieren. Um die Generierung wiederholter Zufallszahlen zu vermeiden, werden die Ergebnisse der Zufallszahlen über Variablen aufgezeichnet. Wenn in der letzten Zufallszahl derselbe Wert vorkommt, wird die Methode selbst aufgerufen, um sicherzustellen, dass unterschiedliche Zufallszahlen generiert werden. Der Code lautet wie folgt:

//生成随机字符串
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;
}

Erstellen Sie dann die Methode CreateImage(string activateNum) basierend auf der generierten Zufallszeichenfolge, um einen weiteren Grafikcode zu generieren. Um die Sicherheit weiter zu gewährleisten, fügen Sie der Grafiküberprüfung einige Interferenzfarben hinzu Code wie zufällige Hintergrundmuster, Textverarbeitung usw. Der Code lautet wie folgt:

//生成图片
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();
    }
}

Schließlich erstellen Sie im Seitenladeereignis Page_Load das Bild der Bestätigungscodezeichenfolge, zeigen es an und speichern die Bestätigungszeichenfolge in der Sitzung.

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

Zu diesem Zeitpunkt wurde ein einfacher Algorithmus zur Generierung von Bildüberprüfungscodes geschrieben. Natürlich können Sie auf dieser Basis umfangreichere Sicherheitseinstellungen hinzufügen, z. B. die Ablaufzeit der Sitzung usw.

Das obige ist der detaillierte Inhalt vonPraxis zur Generierung von grafischem ASP.NET-Verifizierungscode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn