ASP生成数字相加求和的BMP图片验证码

目前网络上有许多图片验证码形式,那些没有生成图片的验证码的抗破解防御能力简直不堪一击;有人直接在网页源码里显示出具体的数字,然后要求访问者输入一个相加后的和;如3+5=多少,这样的验证码新意倒有一些,不过可惜,根本没有起到保护的作用。

flymorn改进一下以上的新意,直接把3+6=多少的形式采用asp程序生成Bmp图片格式,并且把数字相加后的和存进session里,加大破解的门槛;没有一些图形图像学知识的人是无法破解的。代码如下:



代码如下:

<% 
Response.Buffer = True 
Response.ExpiresAbsolute = Now() - 1 
Response.Expires = 0 
Response.cachecontrol = "no-cache"

Response.ContentType = "Image/Bmp"

Call Com_CreatValidCode()

Sub Com_CreatValidCode()

Randomize

Dim i, ii, iii

Const cAmount = 10 '数值个数

Const cCode = "0123456789"  '数值范围

Dim vColorData(2)

vColorData(0) = "" '黑色点要转为彩色点,暂时不定义

vColorData(1) = ChrB(255) & ChrB(255) & ChrB(255) '白点

Dim vCode(4), vCodes '产生一组任意数

For i = 0 To 3

vCode(i) = Int(Rnd * cAmount) '数组等于总数*随机数

if i=1 then vCode(i)="11"  '第二位为+

if i=3 then vCode(i)="10"  '第四位为=

vCodes=vCodes&Mid(cCode,vCode(i)+1,1) '串等于串加上后续值

Next

session("checkcode")=int(Mid(vCodes,1,1)) + int(Mid(vCodes,2,1)) '计算相加和值并赋值给session

Dim vNumberData(36)

vNumberData(0) =

"1110000111110111101111011110111101111011110111101111011110111101111011110111101111011110111110000111"

vNumberData(1) =

"1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111"

vNumberData(2) =

"1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011"

vNumberData(3) =

"1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111"

vNumberData(4) =

"1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011"

vNumberData(5) =

"1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111"

vNumberData(6) =

"1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111"

vNumberData(7) =

"1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111"

vNumberData(8) =

"1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111"

vNumberData(9) =

"1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111"

'表示=
vNumberData(10) =

"1111111111111111111111111111111000000001111111111111111111111000000001111111111111111111111111111111"  
'表示+
vNumberData(11) =

"1111111111111100111111110011111111001111100000000110000000011111001111111100111111110011111111111111"

Response.BinaryWrite ChrB(66) & ChrB(77) & ChrB(230) & ChrB(4) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_

ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) &_

ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(10) & ChrB(0) &_

ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)

Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(176) & ChrB(4) &_

ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) &_

ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_

ChrB(0) & ChrB(0)

For i = 9 To 0 Step -1 '行

For ii = 0 To 3  '字数

For iii = 1 To 10 '像素点

if Mid(vNumberData(vCode(ii)), i * 10 + iii , 1)  ="0" then '产生彩色点,减去一个固定值,可使颜色偏深

dim a,b,c

a=abs(Rnd * 256-60)

b=abs(Rnd * 256-128)

c=abs(Rnd * 256-60)

vColorData(0) = ChrB(a) & ChrB(b) & ChrB(c)

Response.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii , 1))

else

dim d,e,f '产生彩色背景,颜色偏浅,也可以随机生成噪点做背景

d=abs(Rnd * 255)

e=abs(Rnd * 255)

f=abs(Rnd * 255)

if d+e+f>640 then  '可改值,调整背景色深

vColorData(1) = ChrB(d) & ChrB(e) & ChrB(f)

Response.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii , 1))

else

Response.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii , 1))

end if

end if

Next

Next

Next

End Sub  
%>

以上代码可直接另存为一个文件,如vcode.asp,然后通过图片的方式调用改文件,如<img src="vcode.asp" border=0 align="absmiddle" />,然后在提交后的处理页面里验证session("checkcode")的值就可以了。这个代码是flymorn自己改进的,原始的参考代码请直接在google里搜索“用ASP生成Bmp图片”,或查看这个网址,可以找到一些相关的。

最后,就是“5+6=”这样的随机数字相加的形式生成在bmp图片里了,它们的和需要你计算后填入,以达到验证的功能,防止机器蹂躏你的网站。如果你也关心asp图片验证码,欢迎留言,让我们一起交流。

(0)

相关推荐

  • ASP生成数字相加求和的BMP图片验证码

    目前网络上有许多图片验证码形式,那些没有生成图片的验证码的抗破解防御能力简直不堪一击:有人直接在网页源码里显示出具体的数字,然后要求访问者输入一个相加后的和:如3+5=多少,这样的验证码新意倒有一些,不过可惜,根本没有起到保护的作用. flymorn改进一下以上的新意,直接把3+6=多少的形式采用asp程序生成Bmp图片格式,并且把数字相加后的和存进session里,加大破解的门槛:没有一些图形图像学知识的人是无法破解的.代码如下: 复制代码 代码如下: <%  Response.Buffer 

  • python 将字符串中的数字相加求和的实现

    计算字符串中所有数字的和,字符串中有数字和字母组合而成 如果出现连续数字,按照一个数操作 具体解释在代码行里: def sum_str(str1): len1=len(str1) #首先将字符串str1的长度赋值给len1 sum = n = 0 #建立一个值为0的空变量sun #建立一个值为0的空变量n for i in range(len1): #用i来遍历字符串的长度 if 49 <= ord(str1[i]) <= 57: #判断字符ascii码是否在数字ascii值范围内 n = n

  • PHP使用GIFEncoder类生成的GIF动态图片验证码

    相信很多人都想过如何用PHP生成GIF动画来实现动态图片验证码,以下是实现过程. ImageCode函数通过GIFEncoder类实现的GIF动画的PHP源代码,有兴趣的朋友可以研究一下. 效果如图: 复制代码 代码如下: /**   * ImageCode 生成GIF图片验证   * @param $string 字符串   * @param $width 宽度   * @param $height 高度   * */   function ImageCode($string = '', $w

  • PHP实现GIF图片验证码

    这是一个用PHP生成GIF动画来实现动态图片验证码的程序,非常实用,是php用户注册登录界面经常需要用到的验证码程序,有需要GIF动态图片验证码功能的朋友可以收藏一下. 第一步:创建ImageCode.php文件,验证码生成函数代码如下: <?php /** * ImageCode 生成GIF图片验证 * @param $string 字符串 * @param $width 宽度 * @param $height 高度 * */ function ImageCode($string = '',

  • Python生成数字图片代码分享

    本文向大家分享了几段Python生成数字图片的代码,喜欢的朋友可以参考.具体如下: 最终版本 # -*- coding:utf-8 -*- from PIL import Image,ImageFont,ImageDraw,ImageFilter import random import os import time class Code(object): def __init__(self, imgSize=(35,35),\ fontSize=25, bgColor=(255,)*4, fo

  • php生成数字字母的验证码图片

    php生成数字字母的验证码图片 <?php header ('Content-Type: image/png'); $image=imagecreatetruecolor(100, 30); $color=imagecolorallocate($image, 255, 255, 255); imagefill($image, 20, 20, $color); //只含有数字 // for($i=0;$i<4;$i++){ // $font=6; // $x=rand(5,10)+$i*100/

  • ASP生成随机字符串(数字+大小写字母)的代码

    <% 'ASP生成随机字符串(数字+大小写字母)练习 '阿会楠练习,为我所用,非我所想  Function randKey(obj)  Dim char_array(80)  Dim temp  For i = 0 To 9    char_array(i) = Cstr(i)  Next  For i = 10 To 35   char_array(i) = Chr(i + 55)  Next  For i = 36 To 61   char_array(i) = Chr(i + 61)  N

  • asp.net下用Aspose.Words for .NET动态生成word文档中的图片或水印的方法

    1.概述 在项目中生成word文档,这个功能很普遍的,一般生成都是纯文字或是列表的比较多,便于客户打印,而要把图片也生成到word文档中的需求有些客户也是需要的,例如产品图片.这次我们介绍的是如何利用Aspose.Words for .NET在Word中动态的生成图片或水印.Aspose.Words for .NET,这个我就不多介绍了,不清楚的朋友可以看看上一篇文章.需求总是变化得快,最近项目中又多了一个这样需求:系统中生成报价单后,要有一个签名,这个签名是根据不同用户来生成的图片.好了,下面

  • asp汉字中文图片验证码的实现代码

    '此代码是在别人基础上增加的汉字功能,特此感谢,同时感谢鬼火狼烟.  '以前的图片验证码很容易被破解,所以在其基础上进行改进,生成汉字,就目前而言很难破解 用法:  在需要显示验证码图片的地方插入代码 <img src="code.asp">  同时,自动生成session("psn"),表单提交验证session就可以了. 复制代码 代码如下: <%  '------------------  '汉字图片验证码  '此代码是在别人基础上增加的汉字

  • asp.net 图片验证码的HtmlHelper

    一个图片验证码的HtmlHelper,原来的调用代码如下: 复制代码 代码如下: <img id="validateCode" mailto:src='@Url.Action(%22GetValidateCode%22)'/> <script language="javascript" type="text/javascript"> $(document).ready(function () { $("#vali

随机推荐