De nombreuses pages Web utilisent désormais des images aléatoires lors de la connexion, ce qui constitue un moyen simple et efficace de prévenir les attaques malveillantes des pirates. J'ai lu quelques informations sur Internet aujourd'hui et je comprends le principe de génération : obtenir une chaîne aléatoire à partir de l'échantillon, enregistrer la chaîne aléatoire dans la session et former une image de code aléatoire sous la forme d'un bitmap.
accomplir:
Ajoutez un espace de noms
à l'aide de System.Drawing ;
en utilisant System.Drawing.Imaging ;
en utilisant System.Drawing.Drawing2D ;
Générer le code de la page
à l'aide du système ;
en utilisant System.Data ;
en utilisant System.Configuration ;
en utilisant System.Collections ;
en utilisant System.Web ;
en utilisant System.Web.Security ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.WebControls.WebParts ;
en utilisant System.Web.UI.HtmlControls ;
en utilisant System.Drawing ;
en utilisant System.Drawing.Imaging ;
en utilisant System.Drawing.Drawing2D ;
classe partielle publique getRandImg : System.Web.UI.Page
{
protected void Page_Load (expéditeur de l'objet, EventArgs e)
{
//Générer des images de code aléatoire
SetValidateCode();
//La page générée n'est pas enregistrée dans le cache
Réponse.Cache.SetNoStore();
}
//Définir le code de vérification
vide privé SetValidateCode()
{
//Créer un nouveau bitmap
Bitmap newBitmap = nouveau Bitmap(
71,
vingt-trois,
PixelFormat.Format32bppArgb
);
//Récupère l'écran de dessin à partir du bitmap
Graphiques g = Graphics.FromImage(newBitmap);
//générateur de nombres aléatoires
Aléatoire r = nouveau Aléatoire();
//Effacer l'écran de dessin
g.Clair (Couleur.Blanc);
//Interférence de ligne d'écran de dessin
pour (int i = 0; i < 50; i++)
{
int x1 = r.Next(newBitmap.Width);
int x2 = r.Next(newBitmap.Width);
int y1 = r.Next(newBitmap.Height);
int y2 = r.Next(newBitmap.Height);
g.DrawLine (nouveau stylo (
Couleur.FromArgb(r.Next())),
x1,
y1,
x2,
y2
);
}
//Dessin d'interférence de point d'écran
pour (int i = 0; i < 100; i++)
{
int x = r.Next(newBitmap.Width);
int y = r.Next(newBitmap.Height);
nouveauBitmap.SetPixel(
x,
oui,
Couleur.FromArgb(r.Next())
);
}
//Obtenir une chaîne aléatoire (5 chiffres de longueur)
valeur de chaîne = GenerateRandom(5);
// Attribuer une chaîne aléatoire à la session
Session["RandCode"] = valeur ;
//Définir le style de police d'affichage de l'image
Police police = nouvelle police (
"Arial",
14,
FontStyle.Bold
);
Aléatoire rr = nouveau Aléatoire();
int yy = rr.Next(1, 4);
//Définit une chaîne aléatoire pour afficher le pinceau d'image
Pinceau LinearGradientBrush = nouveau LinearGradientBrush (
nouveau Rectangle(0, 0, 71, 23),
Couleur. Rouge,
Couleur. Bleu,
1.2f,
vrai
);
g.DrawString (valeur, police, pinceau, 2, yy);
g.DrawRectangle (nouveau stylo (
Couleur. Argent),
0,
0,
70,
vingt-deux
);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
newBitmap.Save(ms, ImageFormat.Gif);
//Image de sortie
Réponse.ClearContent();
Réponse.ContentType = "image/gif" ;
Réponse.BinaryWrite(ms.ToArray());
}
//Ensemble constant
char statique privé[] constante ={
'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'
} ;
//génère une chaîne aléatoire
chaîne statique publique GenerateRandom (int Longueur)
{
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(36);
Aléatoire rd = nouveau Aléatoire();
pour (int i = 0; i < Longueur; i++)
{
newRandom.Append(constant[rd.Next(36)]);
}
return newRandom.ToString();
}
}
Pour les pages utilisant des images aléatoires, le contrôle IMAGE est écrit comme suit :
<asp:Image ID="Image1" ImageUrl="~/getRandImg.aspx" runat="server" />
Exemple de code : http://www.cnblogs .com /heekui/archive/2007/01/06/613609.html