ASP.NET随机码生成示例

现在很多网页登陆的时候都使用了随机图片的方式,是一种简单、有效的防止黑客恶意攻击的手段。今天看了一些网上的资料,明白其生成原理:从样本中,获取随机字符串,随机字符串保存进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://www.cnblogs.com/Files/heekui/RandCode.rar

时间: 2024-08-03 00:03:29

ASP.NET随机码生成示例的相关文章

Asp.NET 随机码生成基类(随机字母,随机数字,随机字母+数字)_实用技巧

复制代码 代码如下: using System; using System.Data; using System.Configuration; 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; usi

asp.net递归生成XML树的示例

asp.net|xml|生成xml|示例|递归 asp.net递归生成XML树的示例 代码: 以下是引用片段://CDepartmentInfo 类别实体类 //sjid :与大类别关联ID //space:只是一个标记 //strOpinion用来存放类名 string sjid = "0"; string space = "+"; string strOpinion = ""; string paths = @"E:\test&qu

ASP.NET MVC 2示例Tailspin Travel UI层分析

Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示了许多Visual Studio 2010, .NET Framework 4, 和Windows Server AppFabric的技术,参看ASP.NET MVC 2示例Tailspin Travel. Tailspin Travel设计的技术比较多,今天我们来看看界面(UI)上的技术,在UI层

一起谈.NET技术,ASP.NET MVC 2示例Tailspin Travel UI层分析

Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示了许多Visual Studio 2010, .NET Framework 4, 和Windows Server AppFabric的技术,参看ASP.NET MVC 2示例Tailspin Travel. Tailspin Travel设计的技术比较多,今天我们来看看界面(UI)上的技术,在UI层

网页-用什么技术可以实现asp页面自动生成htm页面?

问题描述 用什么技术可以实现asp页面自动生成htm页面? 我的网站是用asp编写的,如何做到:在网页内容创建或者更新时自动生成静态HTML页面,以后的浏览全部引向静态页面?用什么技术去实现?可以向我推荐一些书籍! 解决方案 这个不是asp干的活,可以通过其他发布程序可以直接生成html页面的.百度下吧,现在发布成html页面的系统也比较多.asp页面最多是通过前端的web服务,可以配置成页面缓存. 解决方案二: 你可以是试一下asp.net的页面静态化,还是要写程序自动生成的 解决方案三: 全

巧用ASP实现在线生成PDF文档

    在开始讲解ASP实现在线生成PDF文档之前我们先了解一下PDF的历史,了解了某个东西,知道他的作用性以及重要性,再去学习该ASP程序相信效果一定不一样.     Adobe PDF格式已经变成很多机构和公司进行跨平台制表的通用媒体格式.尽管我不是这个产品的狂热痴迷者,却不得不接受这样一个事实:用这个格式产生一个协定可能会比用Word还要好.           由于在一家雇用公司工作,我已经把我们所有早期的软件写成能在Internet上运行,这样我们就能和小的子公司共享公用数据库了.然而

asp之转换函数示例

函数|示例|转换 asp之转换函数示例 Variant变量一般会将其代表的数据子类型自动转换成合适的数据类型,但有时候,自动转换也会造成一些数据类型不匹配的错误.这时,可使用转换函数来强制转换数据的子类型. 函数 功能 Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码. Chr 函数 返回与指定的 ANSI 字符代码相对应的字符 Hex 函数 返回表示十六进制数字值的字符串. Oct 函数 返回表示数字八进制值的字符串. CStr 函数 返回表达式,该表达式已被转换为 字符串 子

asp之字符串函数示例

函数|示例|字符串 asp之字符串函数示例用字符串函数对字符串进行截头去尾.大小写替换等操作. 函数 语法 功能 Len Len(string|varname) 返回字符串内字符的数目,或是存储一变量所需的字节数. Trim Trim(string) 将字符串前后的空格去掉 Ltrim Ltrim(string) 将字符串前面的空格去掉 Rtrim Rtrim(string) 将字符串后面的空格去掉 Mid Mid(string,start,length) 从string字符串的start字符开

Asp.net动态生成html页面

asp.net|动态|生成html|页面 此功能适用于后台数据库功能不强的web站点,即大部分文本不是存放在数据库的记录中,而是放在html文件或者xml文件中,仅仅把索引放到数据库中,如文章标题.类别.查询关键字等.这样适合于后台没有诸如MS Sql Server这样的数据库支持的Web站点. 适用于新闻发布系统,比如sina.163等都是采用动态生成html页面的. 适用于需动态定制页面的程序.比如论坛.聊天室等.可以加载定制好的html页面,来加强美观. 思路 1. 利用如Dw-Mx这样的