Pratique de génération de code de vérification graphique ASP.NET

Hello World!
Libérer: 2020-04-28 13:18:07
original
2380 Les gens l'ont consulté

Pourquoi utiliser un code de vérification graphique

Afin d'empêcher les attaquants d'écrire des programmes pour soumettre des formulaires à plusieurs reprises et causer des problèmes aux autres utilisateurs et aux opérations du site Web, il est généralement nécessaire d'utiliser la vérification graphique avant de soumettre le formulaire. Le code est vérifié pour confirmer que l'opération de soumission est une opération humaine et non une opération par lots de machine.

Analyse des principes

Lors de la génération de codes de vérification graphiques, deux technologies sont principalement utilisées :

1. Générer des nombres aléatoires ou. lettres

2. Convertissez les nombres aléatoires ou les lettres aléatoires générés au format d'image, ajoutez du bruit à l'image et affichez-la.

Méthode de génération :

1. Code de contrôle frontal

<asp:TextBox ID="txtValidateNum" runat="server" Width="98px"></asp:TextBox>
<asp:Image ID="Image1" runat="server" Height="22px" Width="58px" ImageUrl="~ValidateNum.aspx"/>请输入图片中验证码!
Copier après la connexion

2. Étapes de traitement de la page ValidateNum.aspx

( 1) Générez aléatoirement une chaîne aléatoire de longueur N. La valeur de N peut être définie par le développeur. La chaîne contient des chiffres, des lettres, etc.

(2) Créez une chaîne générée aléatoirement dans une image et affichez-la.

(3) Enregistrez le code de vérification

Créez d'abord une méthode CreateRandomNum(int n) dans le fichier ValidateNum .aspx.cs pour générer aléatoirement une chaîne aléatoire de longueur n. Afin d'éviter de générer des nombres aléatoires répétés, les résultats des nombres aléatoires seront enregistrés via des variables. Si la même valeur apparaît dans le dernier nombre aléatoire, la méthode elle-même sera appelée pour garantir que différents nombres aléatoires sont générés. Le code est le suivant :

//生成随机字符串
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;
}
Copier après la connexion

Créez ensuite la méthode CreateImage(string validateNum) basée sur la chaîne aléatoire générée pour générer davantage un code graphique Afin de garantir davantage la sécurité, ajoutez quelques couleurs d'interférence à la vérification graphique. code, tel que des motifs d'arrière-plan aléatoires, un traitement de texte, etc. Le code est le suivant :

//生成图片
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();
    }
}
Copier après la connexion

Enfin, dans l'événement de chargement de page Page_Load, créez et affichez l'image de la chaîne de code de vérification, et enregistrez la chaîne de vérification dans la session.

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

À ce stade, un simple algorithme de génération de code de vérification d'image a été écrit. Bien sûr, vous pouvez ajouter des paramètres de sécurité plus riches sur cette base, tels que l'heure d'expiration de la session, etc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal