在开发企业地理信息管理系统登录模块时,使用数字加字母组合的图文验码技术来增强系统的安全性。运行本实例,输入用户“mr”,密码“mrsoft”及验证码,将跳转到欢迎用户页,运行效果如图1所示。
本实例中通过引用using System.Drawing命名空间,利用Graphics的FromImage方法创建一个画布,并设置画布的宽和高,设置完成后,通过Graphics类的DrawString方法将随机生成的字符串验证码绘制到画布中。
(1)FromImage方法
语法:
public static Graphics FromImage(Image image)
参数说明:
image:从中创建新Graphics的Image。
(2)DrawString方法
语法:
public void DrawString(string s,Font font,Brush brush,float x,float y)
参数说明:
(1)新建一个网站,将其命名为Number,默认主页为Default.aspx。然后再创建一个新窗体将其命名为Login.aspx用来实现用户登录功能,在该登录窗体中实现数字与字母组合的验证码。
(2)添加一个新窗体,命名为CreatePic.aspx,按F7键打开CreatePic.aspx页面的代码视图,该代码视图中添加一个生成随机字符的方法RandomNum(int Len),方法参数“Len”主要用来控制生成随机验证码的位数,主要代码如下:
public string RandomNum(int Len) { string str = "0,1,2,3,4,5,6,7,8,9,"; str += "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,"; str += "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"; string[] s = str.Split(new char[] { ',' }); //将字符串拆分成字符串数组 string strNum = ""; int tag = -1; //用于记录上一个随机数的值,避免产生两个重复值 Random rnd = new Random(); for (int i = 1; i <= Len; i++) //产生一个长度为Len的随机字符串 { if (tag == -1) { rnd = new Random(i * tag * unchecked((int)DateTime.Now.Ticks)); //初始化一个Random实例 } int rndNum = rnd.Next(0, 61); //返回小于61的非负随机数 if (tag != -1 && tag == rndNum) //如果产生与前一个随机数相同的数,则重新生成一个新随机数 { return RandomNum(Len); } tag = rndNum; strNum += s[rndNum]; } Session["CheckCode"] = strNum; //将生成的随机码保存到Session中 return strNum; }
直接生成和识别图形的图形验证技术
使用纯图形方式的图形验证码基本原则是:按照约定算法生成具有某种特征的图形,在识别时按照约定算法反向解析图形中的特征信息是否与用户输入一致。一般来说,图形验证码中干扰色越多,程序越难把字码认出来,这样可以进一步保证安全性。通常用的干扰色有:随机文字颜色、随机颜色底纹、随机文字位置、随机文字大小、,随机背景花纹等。不管使用什么样的干扰色都要保证两点:用户仍可以识别图形中的验证码,可以编写算法准确识别图形。