ASP生成数字相加求和的BMP图片验证码
来源:asp之家 发布时间:2011-04-14 10:48:00
目前网络上有许多图片验证码形式,那些没有生成图片的验证码的抗破解防御能力简直不堪一击;有人直接在网页源码里显示出具体的数字,然后要求访问者输入一个相加后的和;如3+5=多少,这样的验证码新意倒有一些,不过可惜,根本没有起到保护的作用。
flymorn改进一下以上的新意,直接把3+6=多少的形式采用asp程序生成Bmp图片格式,并且把数字相加后的和存进session里,加大破解的门槛;没有一些图形图像学知识的人是无法破解的。代码如下:
代码如下:
<%
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.cachecontrol = "no-cache" 'www.cidianwang.com
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图片验证码,欢迎留言,让我们一起交流。
猜你喜欢
- 通过引用serial模块包,来操作串口。1、查看串口名称在Linux和Windows中,串口的名字规则不太一样。需要事先查看。Linux下的
- WebSocketWebSocket说明WebSocket 是全双工网络通信通信协议,实现了客户端和服务器的平等对话,任何一方都可以主动发送
- SQL Server 2008我们也能从中体验到很多新的特性,但是对于SQL Server 2008安装,还是用图来说话比较好。本文将从SQ
- 前言:为什么要写这篇文章,因为前段时间有一个开源的github中的项目有一个朋友提交了一个pr看了下是帮忙优化了下代码(十分感谢这位网友)。
- 处理办法,删除该文件,或清空该文件内容;我的处理是清空后,再设置该文件权限为Everyone拒绝访问。
- 最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定
- 先看一下最简单的例子,在test中,添加一个字段,字段名为birth,类型为date类型。mysql> alter table tes
- 过年GUI博客二连发,本打算出去玩玩,奈何空气,天气实在差,遂使用tkinter开发一款GUI刷屏器,写此博客记录一下我的开发思路。一.准备
- 目录match 分组re.sub 匹配和替换反向引用参考re 模块是 Python 标准库中提供的用于处理正则表达式的模块,利用
- 本文实例讲述了PHP实现断点续传乱序合并文件的方法。分享给大家供大家参考,具体如下:分割成多个文件发送,由于网络原因并不上先发就能发接收到。
- 多边形选区概述多边形选区是一种常见的对象选择方式,在一个子图中,单击鼠标左键即构建一个多边形的端点,最后一个端点与第一个端点重合即完成多边形
- 常见的绑定事件有直接绑定在页面元素中比如<div id="wrap" onclick="a();&quo
- 前提搭建钉钉应答机器人,需要先准备或拥有以下权限:钉钉企业的管理员或子管理员(如果不是企业管理员,可以自己创建一个企业,很方便的)有公网通信
- 1.文件的读取和显示方法1: f=open(r'G:\2.txt') print f.read()&nb
- 一、下载MySQL msi版本下载地址:https://dev.mysql.com/downloads/mysql/二、安装直接右击点击安装
- Config:服务端连接Git配置,代码如下所示:1、导入依赖<dependencies> <d
- asp.net MVC中Action参数不只是一些基本类型,也支持实体参数。那么从客户端传来的数据如何映射或转换成实体对象呢?就是通过实体绑
- 对于任何一个开发项目来说最大的错误可能就是没有计划。最近,有些人认为开始前无需计划,一个优秀的开发者需要的是随机应变。我敢肯定这样的做法最后
- 1、什么是AspJpeg?AspJpeg是一款功能强大的基于Microsoft IIS环境的图片处理组件,AspJpeg可以使用很少的代码在
- 目录它有什么作用?安装方法简介它有什么作用?它提供了一种将包括Python对象在内的结构化数据打包为JSON可序列化格式的机制。通过向相应的