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

2018-09-06 12:29

阅读:453

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

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

复制代码 代码如下:
<%
Response.Buffer=True
Response.ExpiresAbsolute=Now()-1
Response.Expires=0
Response.cachecontrol=no-cache


CallCom_CreatValidCode()

SubCom_CreatValidCode()

Randomize

Dimi,ii,iii

ConstcAmount=10数值个数

ConstcCode=0123456789数值范围

DimvColorData(2)

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

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

DimvCode(4),vCodes产生一组任意数

Fori=0To3

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

ifi=1thenvCode(i)=11第二位为+

ifi=3thenvCode(i)=10第四位为=

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

Next

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

DimvNumberData(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.BinaryWriteChrB(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.BinaryWriteChrB(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)

Fori=9To0Step-1行

Forii=0To3字数

Foriii=1To10像素点

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

dima,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.BinaryWritevColorData(Mid(vNumberData(vCode(ii)),i*10+iii,1))

else

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

d=abs(Rnd*255)

e=abs(Rnd*255)

f=abs(Rnd*255)

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

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

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

else

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

endif

endif

Next

Next

Next

EndSub
%>

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

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


评论


亲,登录后才可以留言!