文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ASP.NET随机码生成示例_ASP.NET技巧

ASP.NET随机码生成示例_ASP.NET技巧

时间:2010-10-14  来源:蔚蓝的大海

现在很多网页登陆的时候都使用了随机图片的方式,是一种简单、有效的防止黑客恶意攻击的手段。今天看了一些网上的资料,明白其生成原理:从样本中,获取随机字符串,随机字符串保存进session,并以位图的方式形成随机码图片。

实现:
添加命名空间

using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
生成页代码

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

public partial class getRandImg : System.Web.UI.Page
{
    PRotected void Page_Load(object sender, EventArgs e)
    {
        //生成随机码图片
        SetValidateCode();
        //生成页面不保存到cache
        Response.Cache.SetNoStore();
    }

    //设置验证码
    private void SetValidateCode()
    {
        //新建位图
        Bitmap newBitmap = new Bitmap(
                                        71,
                                        23,
                                        PixelFormat.Format32bppArgb
                                     );
        //从位图获得绘图画面
        Graphics g = Graphics.FromImage(newBitmap);
        //随机数生成器
        Random r = new Random();
        //绘图画面清空
        g.Clear(Color.White);
        //绘图画面划线干扰
        for (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(new Pen(
                                Color.FromArgb(r.Next())),
                                x1,
                                y1,
                                x2,
                                y2
                              );
        }
        //绘图画面点数干扰
        for (int i = 0; i < 100; i++)
        {
            int x = r.Next(newBitmap.Width);
            int y = r.Next(newBitmap.Height);
            newBitmap.SetPixel(
                                x,
                                y,
                                Color.FromArgb(r.Next())
                              );
        }
        //获得随机字符串(5位长度)
        string value = GenerateRandom(5);
        //随机字符串赋值给Session
        Session["RandCode"] = value;
        //定义图片显示字体样式
        Font font = new Font(
                               "Arial",
                               14,
                               FontStyle.Bold
                            );
        Random rr = new Random();
        int yy = rr.Next(1, 4);
        //定义随机字符串显示图片刷子
        LinearGradientBrush brush = new LinearGradientBrush(
                                                              new Rectangle(0, 0, 71, 23),
                                                              Color.Red,
                                                              Color.Blue,
                                                              1.2f,
                                                              true
                                                           );
        g.DrawString(value, font, brush, 2, yy);
        g.DrawRectangle(new Pen(
                                  Color.Silver),
                                  0,
                                  0,
                                  70,
                                  22
                                );
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        newBitmap.Save(ms, ImageFormat.Gif);
        //输出图片
        Response.ClearContent();
        Response.ContentType = "image/gif";
        Response.BinaryWrite(ms.ToArray());
    }

    //常量集
    private static char[] constant ={
                                        '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'
                                    };


    //生成随机字符串
    public static string GenerateRandom(int Length)
    {
        System.Text.StringBuilder newRandom = new System.Text.StringBuilder(36);
        Random rd = new Random();
        for (int i = 0; i < Length; i++)
        {
            newRandom.Append(constant[rd.Next(36)]);
        }
        return newRandom.ToString();
    }
}

使用随机图片的页面,IMAGE控件的写法如下:

<asp:Image ID="Image1" ImageUrl="~/getRandImg.aspx" runat="server" />

示例代码:http://files.cnblogs.com/heekui/RandCode.rar

http://www.cnblogs.com/heekui/archive/2007/01/06/613609.html


Replica Gucci 198339 Evening Bag in White Patent Leather Gucci-198339-White HandbagsReplica Gucci bag 177139 in light coffee Gucci-177139Z HandbagsReplica Gucci indy large top handle bag 177088 D590G 1000 Gucci-177088-D590G-1000 HandbagsReplica Gucci indy large top handle bag 182888 ET01G 2140 GucCi-182888-ET01G-2140 HandbagsReplica Gucci indy large top handle bag 182888 gucci-182888 HandbagsReplica Gucci indy medium top handle bag 177139 ECT3G 1000 GUCCI-177139-ECT3G-1000 HandbagsReplica Gucci 197018 hyseria-black patent 197018-02 HandbagsReplica Gucci bag 173689 gucci-173689 HandbagsReplica Gucci bag 197021-new canvass gucci-197021 HandbagsReplica GUCCI G197020-new canvass gucci-197020 HandbagsReplica Gucci Hysteria bag-Pink 189588-01 HandbagsReplica Gucci hysteria-black Guccimassia gucci-197020-04 HandbagsReplica Gucci hysterial-brown gucci-197021-06 HandbagsReplica Gucci medium ysteria-purple guicci-197020-07 HandbagsReplica Gucci 197016 Crystal canvass bag gucci-G197016-F HandbagsReplica Gucci 197018 hysteria-red patent gucci-197018-01 HandbagsReplica Gucci Hysteria Bag 197016 ET00G 6132 gucci-197016-ET00G-6132 HandbagsReplica Gucci Hysteria bag 197017 FZD1G 8365 gucci-197017-FZD1G-8365 HandbagsReplica Gucci Hysteria bag G189588-Silver snake leather gucci-189588-SILVER HandbagsReplica Gucci bag 197021 gucci-197021-01 Handbags
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载