ASP.NET随机码生成示例

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

实现:
添加命名空间

None.gif using  System.Drawing;
None.gif
using  System.Drawing.Imaging;
None.gif
using  System.Drawing.Drawing2D;

生成页代码

None.gif using  System;
None.gif
using  System.Data;
None.gif
using  System.Configuration;
None.gif
using  System.Collections;
None.gif
using  System.Web;
None.gif
using  System.Web.Security;
None.gif
using  System.Web.UI;
None.gif
using  System.Web.UI.WebControls;
None.gif
using  System.Web.UI.WebControls.WebParts;
None.gif
using  System.Web.UI.HtmlControls;
None.gif
using  System.Drawing;
None.gif
using  System.Drawing.Imaging;
None.gif
using  System.Drawing.Drawing2D;
None.gif
None.gif
public  partial  class  getRandImg : System.Web.UI.Page
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
protected void Page_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
//生成随机码图片
InBlock.gif
        SetValidateCode();
InBlock.gif        
//生成页面不保存到cache
InBlock.gif
        Response.Cache.SetNoStore();
ExpandedSubBlockEnd.gif    }

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

InBlock.gif        
//绘图画面点数干扰
InBlock.gif
        for (int i = 0; i < 100; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
int x = r.Next(newBitmap.Width);
InBlock.gif            
int y = r.Next(newBitmap.Height);
InBlock.gif            newBitmap.SetPixel(
InBlock.gif                                x, 
InBlock.gif                                y, 
InBlock.gif                                Color.FromArgb(r.Next())
InBlock.gif                              );
ExpandedSubBlockEnd.gif        }

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

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

InBlock.gif        
return newRandom.ToString();
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值