• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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=vCodesMid(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图片验证码,欢迎留言,让我们一起交流。
    上一篇:不用WinRar只有asp将网络空间上的文件打包下载
    下一篇:静态页面利用JS读取cookies记住用户信息
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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