一个不怕机器识别的图形验证码方案

原创 2016年05月31日 17:44:11

图形验证码是一项非常重要的防攻击防护手段。从最初的数字到12306的各种女优,现在已经是至少第4代技术了。每一次升级换代,似乎都是道高一尺魔高一丈,没多久就会被机器识别技术给攻破。

第一代的图形验证码是简单图形验证,通过把数字/字母转化成图像,然后用户识别后还原为原始的数字/字母输入。系统通过比对用户的输入和原始数据,就可以返回是否通过验证的结果。由于简单地拼接固定的图形,所以是很容易进行机器识别的。

第二代的图形验证码原理和第一代相同,只是在生成图片的过程中,加入了变形和干扰。很可惜,这种变形和干扰对机器识别没多少效果(对于最顶尖的识别程序来说),但人反而很难正确识别。。。。。。。好吧,这种技术挡住了水平一般的识别程序,干掉了80%以上的企图钻空子的,成效卓著。但是,随着20%的有效程序的扩散,这种验证码也就形同虚设。真有人搞你,根本挡不住。于是,12306就搞了奇葩的各种女优的第三代验证码。

第三代技术和前两代完全不同,是通过解答问题来进行验证的。系统给出问题,用户输入问题的答案,系统对答案的比对进行验证。一开始似乎效果很好,完美解决了第二代技术的缺陷。但是,问题终究有限,所以答案也有限。很快,这种技术也沦陷了。

第四代技术就是12306所采用的技术,大家都知道,效果很不错,但问题和第二代技术一样,臣妾真的不认识哪个是女优啊。。。

还有一些其他独辟蹊径的技术,譬如滑动验证等等。


什么样的图形验证码才是好的验证码?

1、人容易识别和输入

2、机器不能识别

做到这两点,就是完美的验证码。


好吧,废话了很多,现在开始说方案。

我的方案是拼图验证,效果如下图:


上面是一个拼图,缺哪块是随机的。后台同时给出一个3x3的拼图(一个缺了一块的背景图片)和9块碎片,碎片的顺序是打乱的。用户需要在下面选上面缺少的那块碎片,并拖到上面完成拼图。这样,机器是很难知道那块碎片对应上面缺少的图形的。提升机器识别难度的偷鸡的做法就是让碎片颜色和原图有差异,边上再来一圈留白,这样机器基本上无法识别,而肉眼识别没什么问题。上图的例子里面,缺少的那块需要滑动碎片带才能出来,大家不要吐槽,呵呵。

问题似乎完美解决!但是,我们要当心别人需要的信息不要被自己泄漏出去。机器识别那个碎片配空白很难,但是知道空白在什么位置很容易。如果我们的碎片是按顺序来的话,呵呵,不费吹灰之力就能拿到数据对不对。所以,我们要把碎片打乱次序。好吧,就9个碎片,那我多猜几次,总能猜到吧,了不起9次循环。所以我们只能让人猜一次,无论验证有没有通过,这个ID的验证数据作废。每次验证,都给一个新的拼图。好吧,你拼图数量总不能无限多吧,我把所有的可能都存起来,然后我就可以猜测该用什么图尝试,平均1/9的成功率也还好啦。呵呵,图样图森破!同样的碎片,每次ID都不一样!你根本就猜不着呀猜不着!!!没错,真正的验证码就是碎片的ID,是个GUID哦。

咦?似乎猜中的几率还是1/9。。。。。。哈哈哈,没错,你只能猜,如果我把缺少的碎片改成1-2块的话。。。。哼哼,再不行就搞5x5的图,缺少1-4块碎片,这个几率是多少,哪位数学学得好给算算。

相关文章推荐

图形验证码的生成和破解

原文:http://www.wzsky.net/html/article/php/php2/111610.html 验证码的功能一般是防止使用程序恶意注册、暴力破解或批量发帖而设置的。所谓验证码,就...
  • zollty
  • zollty
  • 2012年05月12日 21:28
  • 44939

java图形验证码生成工具类及web页面校验验证码

java图形验证码生成工具类及web页面校验验证码
  • zhulin40
  • zhulin40
  • 2016年07月13日 16:59
  • 12148

好用的java图形验证码

工具類validateCodepackage com.jd.jr.faecms.common.validateCode; import javax.imageio.ImageIO; import...
  • cjm1103
  • cjm1103
  • 2017年05月04日 16:24
  • 371

Android 之生成图形验证码

很简单,直接上代码了。import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.C...

【浅谈web网站验证码生成方案之中文验证码 】

前言本篇是继上一篇而进一步讨论中文验证码是如何实现的。基本上只要对上一篇的数字字母验证码稍微修改即可实现中文的验证码。下面介绍如何实现:1)首先要有中文的字库。可以本地建立也可以从数据库中获取,本次测...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

图片滑动验证码

1 体验滑动效果 http://www.geetest.com/exp_popup 2 原理:http://www.ifanr.com/603368 3 举例:http://www.thinkph...

图片滑动验证Demo

首先说一下思路,首先绘制一个闭合路径来作为可移动的图片块的形状,在对应的背景图片位置绘制该路径并填充为灰色,接着在新建一个同样大小的图片,背景设为透明,以及一个对应新的Canvas,利用该路径切割Ca...

自动识别图形验证码

现在大多数网站都采用了验证码来防止暴力破解或恶意提交。但验证码真的就很安全吗?真的就不能被机器识别??我先讲讲我是怎么实现站外提交留言到一个网站的程序。这个网站的留言版大致如下:我一看这种简单的4位数...

自动识别图形验证码

现在大多数网站都采用了验证码来防止暴力破解或恶意提交。但验证码真的就很安全吗?真的就不能被机器识别?? 我先讲讲我是怎么实现站外提交留言到一个网站的程序。 这个网站的留言版大致如下: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个不怕机器识别的图形验证码方案
举报原因:
原因补充:

(最多只允许输入30个字)