ASP.NET随机码生成示例

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

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

实现:
添加命名空间

img_a6339ee3e57d1d52bc7d02b338e15a60.gifusing System.Drawing;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Drawing.Imaging;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Drawing.Drawing2D;

生成页代码

img_a6339ee3e57d1d52bc7d02b338e15a60.gifusing System;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Data;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Configuration;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Collections;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Web;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Web.Security;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Web.UI;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Web.UI.WebControls;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Web.UI.WebControls.WebParts;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Web.UI.HtmlControls;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Drawing;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Drawing.Imaging;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using System.Drawing.Drawing2D;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
public partial class getRandImg : System.Web.UI.Page
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif    
protected void Page_Load(object sender, EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif        
//生成随机码图片
img_33d02437d135341f0800e3d415312ae8.gif
        SetValidateCode();
img_33d02437d135341f0800e3d415312ae8.gif        
//生成页面不保存到cache
img_33d02437d135341f0800e3d415312ae8.gif
        Response.Cache.SetNoStore();
img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif    
//设置验证码
img_33d02437d135341f0800e3d415312ae8.gif
    private void SetValidateCode()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif        
//新建位图
img_33d02437d135341f0800e3d415312ae8.gif
        Bitmap newBitmap = new Bitmap(
img_33d02437d135341f0800e3d415312ae8.gif                                        
71
img_33d02437d135341f0800e3d415312ae8.gif                                        
23
img_33d02437d135341f0800e3d415312ae8.gif                                        PixelFormat.Format32bppArgb
img_33d02437d135341f0800e3d415312ae8.gif                                     );
img_33d02437d135341f0800e3d415312ae8.gif        
//从位图获得绘图画面
img_33d02437d135341f0800e3d415312ae8.gif
        Graphics g = Graphics.FromImage(newBitmap);
img_33d02437d135341f0800e3d415312ae8.gif        
//随机数生成器
img_33d02437d135341f0800e3d415312ae8.gif
        Random r = new Random();
img_33d02437d135341f0800e3d415312ae8.gif        
//绘图画面清空
img_33d02437d135341f0800e3d415312ae8.gif
        g.Clear(Color.White);
img_33d02437d135341f0800e3d415312ae8.gif        
//绘图画面划线干扰
img_33d02437d135341f0800e3d415312ae8.gif
        for (int i = 0; i < 50; i++)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            
int x1 = r.Next(newBitmap.Width);
img_33d02437d135341f0800e3d415312ae8.gif            
int x2 = r.Next(newBitmap.Width);
img_33d02437d135341f0800e3d415312ae8.gif            
int y1 = r.Next(newBitmap.Height);
img_33d02437d135341f0800e3d415312ae8.gif            
int y2 = r.Next(newBitmap.Height);
img_33d02437d135341f0800e3d415312ae8.gif            g.DrawLine(
new Pen(
img_33d02437d135341f0800e3d415312ae8.gif                                Color.FromArgb(r.Next())), 
img_33d02437d135341f0800e3d415312ae8.gif                                x1, 
img_33d02437d135341f0800e3d415312ae8.gif                                y1, 
img_33d02437d135341f0800e3d415312ae8.gif                                x2, 
img_33d02437d135341f0800e3d415312ae8.gif                                y2
img_33d02437d135341f0800e3d415312ae8.gif                              );
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_33d02437d135341f0800e3d415312ae8.gif        
//绘图画面点数干扰
img_33d02437d135341f0800e3d415312ae8.gif
        for (int i = 0; i < 100; i++)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            
int x = r.Next(newBitmap.Width);
img_33d02437d135341f0800e3d415312ae8.gif            
int y = r.Next(newBitmap.Height);
img_33d02437d135341f0800e3d415312ae8.gif            newBitmap.SetPixel(
img_33d02437d135341f0800e3d415312ae8.gif                                x, 
img_33d02437d135341f0800e3d415312ae8.gif                                y, 
img_33d02437d135341f0800e3d415312ae8.gif                                Color.FromArgb(r.Next())
img_33d02437d135341f0800e3d415312ae8.gif                              );
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_33d02437d135341f0800e3d415312ae8.gif        
//获得随机字符串(5位长度)
img_33d02437d135341f0800e3d415312ae8.gif
        string value = GenerateRandom(5);
img_33d02437d135341f0800e3d415312ae8.gif        
//随机字符串赋值给Session
img_33d02437d135341f0800e3d415312ae8.gif
        Session["RandCode"= value;
img_33d02437d135341f0800e3d415312ae8.gif        
//定义图片显示字体样式
img_33d02437d135341f0800e3d415312ae8.gif
        Font font = new Font(
img_33d02437d135341f0800e3d415312ae8.gif                               
"Arial"
img_33d02437d135341f0800e3d415312ae8.gif                               
14
img_33d02437d135341f0800e3d415312ae8.gif                               FontStyle.Bold
img_33d02437d135341f0800e3d415312ae8.gif                            );
img_33d02437d135341f0800e3d415312ae8.gif        Random rr 
= new Random();
img_33d02437d135341f0800e3d415312ae8.gif        
int yy = rr.Next(14);
img_33d02437d135341f0800e3d415312ae8.gif        
//定义随机字符串显示图片刷子
img_33d02437d135341f0800e3d415312ae8.gif
        LinearGradientBrush brush = new LinearGradientBrush(
img_33d02437d135341f0800e3d415312ae8.gif                                                              
new Rectangle(007123), 
img_33d02437d135341f0800e3d415312ae8.gif                                                              Color.Red, 
img_33d02437d135341f0800e3d415312ae8.gif                                                              Color.Blue, 
img_33d02437d135341f0800e3d415312ae8.gif                                                              
1.2f
img_33d02437d135341f0800e3d415312ae8.gif                                                              
true
img_33d02437d135341f0800e3d415312ae8.gif                                                           );
img_33d02437d135341f0800e3d415312ae8.gif        g.DrawString(value, font, brush, 
2, yy);
img_33d02437d135341f0800e3d415312ae8.gif        g.DrawRectangle(
new Pen(
img_33d02437d135341f0800e3d415312ae8.gif                                  Color.Silver), 
img_33d02437d135341f0800e3d415312ae8.gif                                  
0
img_33d02437d135341f0800e3d415312ae8.gif                                  
0
img_33d02437d135341f0800e3d415312ae8.gif                                  
70
img_33d02437d135341f0800e3d415312ae8.gif                                  
22
img_33d02437d135341f0800e3d415312ae8.gif                                );
img_33d02437d135341f0800e3d415312ae8.gif        System.IO.MemoryStream ms 
= new System.IO.MemoryStream();
img_33d02437d135341f0800e3d415312ae8.gif        newBitmap.Save(ms, ImageFormat.Gif);
img_33d02437d135341f0800e3d415312ae8.gif        
//输出图片
img_33d02437d135341f0800e3d415312ae8.gif
        Response.ClearContent();
img_33d02437d135341f0800e3d415312ae8.gif        Response.ContentType 
= "image/gif";
img_33d02437d135341f0800e3d415312ae8.gif        Response.BinaryWrite(ms.ToArray());
img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif    
//常量集
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif
    private static char[] constant =img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif                                        
'0','1','2','3','4','5','6','7','8','9',
img_33d02437d135341f0800e3d415312ae8.gif                                        
'a','b','c','d','e','f','g','h','i','j',
img_33d02437d135341f0800e3d415312ae8.gif                                        
'k','l','m','n','o','p','q','r','s','t',
img_33d02437d135341f0800e3d415312ae8.gif                                        
'u','v','w','x','y','z'
img_105a1e124122b2abcee4ea8e9f5108f3.gif                                    }
;
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif    
//生成随机字符串
img_33d02437d135341f0800e3d415312ae8.gif
    public static string GenerateRandom(int Length)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif        System.Text.StringBuilder newRandom 
= new System.Text.StringBuilder(36);
img_33d02437d135341f0800e3d415312ae8.gif        Random rd 
= new Random();
img_33d02437d135341f0800e3d415312ae8.gif        
for (int i = 0; i < Length; i++)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            newRandom.Append(constant[rd.Next(
36)]);
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_33d02437d135341f0800e3d415312ae8.gif        
return newRandom.ToString();
img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

img_05dd8d549cff04457a6366b0a7c9352a.gif}

img_a6339ee3e57d1d52bc7d02b338e15a60.gif

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

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

示例代码:/Files/heekui/RandCode.rar

目录
相关文章
|
开发框架 .NET 应用服务中间件
ASP.NET Core : 一. 概述
ASP.NET Core : 一. 概述
120 0
ASP.NET Core : 一. 概述
|
开发框架 前端开发 .NET
ASP.NET MVC (五、HttpClient接口解析)(6)
ASP.NET MVC (五、HttpClient接口解析)(6)
166 0
|
开发框架 前端开发 .NET
ASP.NET MVC (五、HttpClient接口解析)(5)
ASP.NET MVC (五、HttpClient接口解析)(5)
130 0
ASP.NET MVC (五、HttpClient接口解析)(5)
|
开发框架 前端开发 .NET
ASP.NET MVC (五、HttpClient接口解析)(4)
ASP.NET MVC (五、HttpClient接口解析)(4)
61 0
ASP.NET MVC (五、HttpClient接口解析)(4)
|
开发框架 前端开发 .NET
ASP.NET MVC (五、HttpClient接口解析)(3)
ASP.NET MVC (五、HttpClient接口解析)(3)
114 0
ASP.NET MVC (五、HttpClient接口解析)(3)
|
开发框架 前端开发 .NET
ASP.NET MVC (五、HttpClient接口解析)(2)
ASP.NET MVC (五、HttpClient接口解析)(2)
110 0
ASP.NET MVC (五、HttpClient接口解析)(2)
|
开发框架 前端开发 .NET
ASP.NET MVC (五、HttpClient接口解析)(1)
ASP.NET MVC (五、HttpClient接口解析)(1)
89 0
ASP.NET MVC (五、HttpClient接口解析)(1)
|
开发框架 前端开发 .NET
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(7)
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(7)
105 0
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(7)
|
开发框架 前端开发 .NET
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(6)
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(6)
94 0
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(6)
|
开发框架 前端开发 .NET
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(5)
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(5)
104 0
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(5)
相关产品
云迁移中心
推荐文章
更多