飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

ASP利用ASPJPEG生成中文汉字验证码(正弦干扰曲线)

Author:飘易 Source:飘易
Categories:Asp编程 PostTime:2010-5-17 1:16:26
正 文:
    ASP利用ASPJPEG生成中文汉字验证码。啥话也不说了,看生成后的图,这样的好处是目前几乎无法破解,汉字验证码的破解难度还是很高的。

    缺点是需要ASPJPEG组件,不过该组件在IIS服务器上的普及率非常高,基本是必备的一个组件。所以这点也无需担心。

    看生成的效果图:

ASP利用ASPJPEG生成中文汉字验证码(正弦干扰曲线)

ASP利用ASPJPEG生成中文汉字验证码(正弦干扰曲线)

ASP利用ASPJPEG生成中文汉字验证码(正弦干扰曲线)

    高级版本的效果图如下(加入正弦波形干扰曲线):
ASP利用ASPJPEG生成中文汉字验证码(正弦干扰曲线)

    ASP源代码如下:
<% 
Response.Expires = -9999
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-ctrol", "no-cache"
Response.ContentType = "image/jpeg"

'生成安全码的函数 
function make_randomize(max_len)'生成长度
'中文/数字/字母/ 最少4个
txt="飘易博客学校书本爷奶百度常春明天谢李润梅皇帝太后个习惯就周立波三峰环境好人啊电视剧影视片你是谁我爱爸妈河蟹草泥马微软谷歌雅虎联想戴惠普佳能神州方正华硕" 
s=""
for i=0 to max_len-1
randomize 
s=s&Mid(txt,Rnd*(Len(txt)-max_len)+1,1)
next
make_randomize=s
end function 

'随机字体
function fontthis()
fontall="宋体|黑体|楷体|隶书|华文中宋|华文细黑"
fontarr=split(fontall,"|")
randomize
fontthis=fontarr(Int((Ubound(fontarr)-0+1)*Rnd+0))
end function

random_num=make_randomize(3)   '飘易:生成3位的安全码 
Session("GetCode")=random_num  '飘易:赋值session

Set Jpeg = Server.CreateObject("Persits.Jpeg")   '调用组件 
Jpeg.Open Server.MapPath("code.jpg")   '打开准备的图片 

for i=1 to 3
Jpeg.Canvas.Font.Rotation = (Rnd*60-30)  '倾斜度
randomize
Jpeg.Canvas.Font.Color = (Rnd*255)*255*255+255*255+(Rnd*255) '颜色
Jpeg.Canvas.Font.Family = fontthis() '字体
Jpeg.Canvas.Font.Bold = false     '是否加粗 true/false
Jpeg.Canvas.Font.Size = Int((30-20+1)*Rnd+20)       '字体大小:20-30
Jpeg.Canvas.PrintText 10+(i-1)*35, 5, Mid(random_num,i,1) '飘易:添加位置
next

jpeg.SendBinary '输出图片
%>

    源代码下载地址:
asp-hanzi-yanzhengma.rar

    高级版本下载地址(带正弦干扰波形):
asp-hanzi-yanzhengma-sin.rar

    另外,在输入验证码提交验证的时候,需要判断验证码是否未空,一定要注意每次输入的验证码仅可以比对一次,即如果验证失败,则必须把 session 清空,如果验证成功后,也必须把这个 session 清空。验证失败清空是为了防止暴 力破 解;验证成功清空是为了防止有人利用验证成功的这个session,不断提交数据。
 
    比如我们可以这样验证(asp):
<%
verifycode = request.form("verifycode")
if verifycode="" or Session("getcode")="" or LCase(cstr(verifycode))<>LCase(cstr(Session("getcode"))) then
''验证失败
Session("getcode")=""    '清空session
response.write "<SCRIPT language=JavaScript>alert('验证码错误!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end

else
''验证成功
Session("getcode")=""   '清空session
''验证成功后的处理语句
end if
%>

作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:Thinkpad笔记本拿掉电池后一直降频
下一篇:解决The selected file was generated by mysqldump...
5条评论 “ASP利用ASPJPEG生成中文汉字验证码(正弦干扰曲线)”
1 画虎
2010-6-13 19:54:16
很不错。感谢分享。谢谢啊。
2 画虎
2010-6-13 19:54:45
ASP利用ASPJPEG生成中文汉字验证码(正弦干扰曲线),请分享。
2010-7-7 22:59:43
Session("getcode")=""   '清空session
这句很失败啊!!
Session("getcode")=timer()
还好想点
4 飘易
2010-7-8 8:49:08
回复 小男:
这里的session仅用于验证本次提交的人工与否,并不需要使得这个session保持一段时间,如果你保持这个session有一段时间,那么在输入一个正确的验证码后,机器可以通过这个没有过期的session,一直不断提交,那么你的所有的验证程序都前功尽弃了。
而如果你使用时间判断,在验证的时候也需要计算这个时间差,但我们仅仅使用这个session用于验证而已,所以不需要保持这个session,当然,你也可以给它赋值。
2010-7-8 19:52:48
哦。没看到条件有个Session("getcode")=""。呵呵。没问题
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2010 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有 渝ICP备07006361号