News-SHOW

了解我们这个行业也了解我们!

关于ASP.NET中图片验证码使用的扫盲

时间:2012-10-27 10:27来源:网络整理 作者:采集侠 点击:

  先说说什么是验证码吧,它是一种区分用户是计较机和人的民众全自动措施。可以防备:恶意破解暗码、刷票、论坛灌水,有用防备某个黑客对某一个特定注册用户用特定措施暴力破解方法举办不绝的登岸实行,现实上是用验证码是此刻许多网站通行的方法(好比招商银行的网上小我私人银行,百度社区),我们操作较量浅显的方法实现了这个成果。图片验证码嘛!嘿嘿,就是用图片的情势表述出来这个验证码喽!至于为什么用图片的情势暗示下面说。

      不知道各人有木有发明,有的时辰上论坛,常常望见什么卖假烟啦,卖茶叶的,一发就是好几页的告白~这也就是没有验证码的缘故起因。着实那些宣布告白贴的用户也不是人手工发贴的,想想啊,那还不累死,为了5毛,不值得啊!都是操作一个发帖的小措施,批量发帖的,假如这个时辰我们的ASP.NET网站行使了图片验证码技能的话,简朴的发帖措施就没有步伐帮主人事变了,整个天下都清净了,有木有?

      尚有就是多年前很风行(此刻也很风行,可是应用的处所纷歧样了)传说中的暴力破解,所谓暴力破解,也就是没有什么技能含量,用一个暴力破解的措施,一向变革暗码来试验,直到把这个暗码试验出来,这个要领在理论上来嗣魅照旧很牛b的,无论什么样的暗码,都可原由暴力破解破解出来。不外话说返来,理论只是理论,可是破解的时刻呢?可以想象,暗码越长,试验的时刻就越长。其后干坏事的人认为,这破解的时刻也太长了,等不及,就把各人常常用的暗码形成一个字库,东台网络公司,好比生日名目标,电话号码名目标等等,这样就大大的增进了破解的乐成率以及破解所花的时刻,有些人配置的暗码还偏偏就是这样的弱范例暗码,唉。。。。明知山有虎方向虎上行啊~

      好了好了,话题都扯远了,本日我就简朴的先容一下传说中ASP.NET中的图片验证码技能。

      着实也不是很难,道理就是这样的,在用户提交信息随处事器之前做一个验证,就是我们动态天生的图片验证码,输入正确,就可以向处事器提交。有人就说了,我们这里为什么要用一张图片?用一串动态天生的字符暗码岂不是更好,节减收集资源,进步网站的机能?哈哈~这里就是人和措施的纷歧样之处了,人能读懂各类资源,图片上的笔墨也不破例,假如只是网页中简朴的一点字符,固然人能大白是什么,可是措施也可以读出来啊!这样自动发帖可能暴力破解措施一样可以辨认简朴的字符啊!就违反了我们的初志,以是这里行使的必然是图片验证码,这样措施要是想辨认就难喽~

好了,此刻看看详细实现的进程,这里只是一个简朴的例子,假如应用在网站中必要思量的就不可是这么简朴了,这里只是图片验证码技能的一个道理哦~

第一看看我们必要用到的对象。

       第一个就是C#中的Random类,它是暗示伪随机数天生器,一种可以或许发生满意某些随机性统计要求的数字序列的。说白了,既然是验证码,就要有一个随无邪态发生的一串字符,用它作为验证码,C#中的Random类就是我们用来天生验证码的类。我们这里只要行使它的Next()要领,这个要了解返回一个随机的正整数。

   第二个就是Session,它提供对会话状态值以及会话级别配置和保留期打点要领的会见。Session 是 用于保持状态的基于 Web 处事器的要领。Session 应承通过将工具存储在 Web 处事器的内存中在整个用户会话进程中保持任何工具。Session 的浸染就是它在 Web 处事器上保持用户的状态信息供在任何时刻从任何页会见。由于赏识器不必要存储任何这种信息,以是可以行使任何赏识器,纵然是像 PDA 或手机这样的赏识器装备。以是这里,我们就把用Random天生的验证码存储在Session中,利便我们行使。

       第三就是C#中的Bitmap类,它封装 GDI+ 位图,此位图由图形图像及其特征的像素数据构成。 Bitmap 是用于处理赏罚由像素数据界说的图像的工具。说白了就是用它建设一张图片,而且做出一些修改。

       第四个就是Graphics类,它封装一个GDI+画图图面,我们首要用它的DrawString()要领,在图片上写上我们的验证码。

       好了,用到的对象不多,就这四个,我们开始Coding吧!

       第一步,实例化一个stirng范例的变量备用,一会儿我们把我们天生的验证码存在内里。这个,就不做过多先容了。

1 string str;

 

       第二步,用Random.next(0,100)获得三个0-100之间的随机数,把他们拼到一路,存在第一步实例化好的string变量中,这就是什么的验证码了,老鸟也许说了,这个验证码是不是太简朴了?虽然是的!这里说的就是一个道理,往后应用中我们可以操作Random出来的整数天生许多字符,好比把获得的随机数用ASCII码的方法转换成大、小写的字符,乃至标记都可以,这里为了利便声名,以是就只用3个随机得到的整数作为验证码吧。

  这里先容一下rand.next(x,y)这个要领就是说返回一个正整数,它大于x而且小于y。

1 Random rand = new Random(); 2 int v1 = rand.Next(0, 100); 3 int v2 = rand.Next(0, 100); 4 int v3 = rand.Next(0, 100); 5 str = v1.ToString() + v2.ToString() + v3.ToString();

 

       第三步,把天生好的string验证码放在Session中备用。

] = str;

 

       第四步,实例化一个Bitmap类,作为我们的画板,这里我用了一张空缺的图片,利便一会儿在上面写写画画~

  这里实例化Bitmap的时辰我们的参数是一张图片的地点,意识是从指定的现有图像初始化 Bitmap 类的新实例。

));

 

       第五步,实例化一个Graphics类,备用作为一个画笔,在一会儿绘图片的时辰用。

  这里可以看出,实例化Graphics类的时辰我们用到的要领是FromImage(),东台网站建设,顾名思义,从指定的现有图像初始化 Bitmap 类的新实例。

1 Graphics g = Graphics.FromImage(bitmap);

 

       第六步,把Random到的验证码用DrawString要领画在方才实例化的Bitmap上。