ASP.NET随机码生成示例

原创 2007年10月01日 12:45:00

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

实现:
添加命名空间

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

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

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

 

 

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(14);
        
//定义随机字符串显示图片刷子
        LinearGradientBrush brush = new LinearGradientBrush(
                                                              
new Rectangle(007123), 
                                                              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();
    }

}

 

Asp.NET 生成随机码

using System; using System.Data; using System.Configuration; using System.Web; using System.Web....
  • lwq8992628351
  • lwq8992628351
  • 2013年04月28日 12:46
  • 246

Android随机验证码的生成

Android随机生成验证码,Android利用随机数绘制不规则的验证码,加强用户登录或者注册的安全性。 具体思路如下: 在一块固定宽高的画布上,画上固定个数的随机数字和字母,再画上固定条数的干扰线,...
  • yushuangping
  • yushuangping
  • 2017年05月04日 16:29
  • 130

android中执行(定时任务)的方法及6位随机码的产生

http://www.cnblogs.com/yejiurui/p/3385385.html 1.直接在线程中睡觉的方法,这个比较常见,操作也方便   class...
  • languobeibei
  • languobeibei
  • 2016年08月31日 19:51
  • 959

.net 中产生唯一随机码的方法分析

现在的WEB中经常会需要产生一些邀请码、激活码。需要是唯一并且随机的。下面总结下一些常用的产生随机码的方法,并分享自己的1个方法. 1. 自己写代码产生随机的数字和字母组合,每产生1个去数据库查询该...
  • wlming6
  • wlming6
  • 2015年07月24日 14:56
  • 598

PHP 生成随机码探索

背景 今天因为无聊,小伙伴让写一个生成5位随机码的函数,要求:可包含数字、字母大小写,代码尽量短。 解题思路(1) . 第一思路都是印象中匹配ASCII码进行随机读取的实现方法,此处可提供一个方法作为...
  • u011415782
  • u011415782
  • 2017年10月20日 18:04
  • 155

生成随机码的2种方法

本来打算写个微盘和百度盘的爬虫 微盘和百度盘的连接形式如下 http://pan.baidu.com/s/6NELdAumeOiO http://vdisk.weibo.com/s/WUdf...
  • wehaju
  • wehaju
  • 2015年11月19日 17:53
  • 92

随机码生成代码

import java.util.Random; public class test { /** * @param args */ public static void main(St...
  • qingtianzhu_wjz
  • qingtianzhu_wjz
  • 2013年05月28日 11:29
  • 540

扩频通信——伪随机序列

伪随机码是人造的随机序列,真实的随机序列就是高斯白噪声。 伪随机码的作用在之前的章节有说明,这里就不说了。先介绍白噪声的性质 白噪声 自相关函数: 双边噪声谱密度: (单边则为n。) 而伪...
  • caohui1994
  • caohui1994
  • 2015年03月18日 00:33
  • 816

Android生成随机验证码技术

在Android客户端应用开发中,往往需要短信验证码或者随机验证码来限制用户的操作或者认证。短信验证码是为了对用户进行认证,主要通过Http协议等通信协议实现;随机验证码很大程度是为限制或者提示用户相...
  • u012637501
  • u012637501
  • 2015年06月15日 15:52
  • 1440

生成图片带有随机码的验证码

页面端:   URP 综合教务系统 - 登录 /css/newcss/login.css" rel="stylesheet" type="text/css"> /css/newcss/pr...
  • RonaldoZH
  • RonaldoZH
  • 2015年09月10日 15:06
  • 1219
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET随机码生成示例
举报原因:
原因补充:

(最多只允许输入30个字)