正 文:
目前,WEB网站上大量使用了验证码/附加码技术来防止机器的自动提交;而破解验证码的方法现在一般都是OCR破解(即光学字符识别),OCR破解过程一般是这样的:先去噪 -》二值化-》细化-》特征提取-》分类器设计 -》建库;至于具体的OCR流程不在本文讨论的内容中。
飘易今天要谈的是曾经流行过一段时间的暴力穷举破解算法。为什么现在过时不可行了呢!
我们来看,现在比较流行的英文字母和数字随机组合的验证码,如下图:
这样的四位字符的图片验证码,如果要暴力破解,需要多长时间呢?
和飘易一起计算下吧:
去除数字 0 和字母 O (因为这两字符不好辨认),剩下34个字符,即1-9,A-N,P-Z;
我们某次猜中的概率为 1/34^4 ,
猜不中的概率为 1-1/34^4 = 0.99999925 ,
100000次(十万)内猜不中的概率为 0.99999925^100000 = 0.9279 ,
要想达到0.95的猜中概率,需要大约400万次!
假设每次耗时0.001秒,理论上猜中一次验证码所需要的时间是400万*0.001=4000秒,合
66.6分钟,一个多小时!可以想象,破解一个验证码需要一个小时的时间,对于任何自动化的程序都失去了意义了。
而且我们还没有考虑服务器的响应状态,一般的服务器根本无法处理每分钟 6万次的请求吧。
所以,暴力破解验证码 == NO !但为什么,这样的数字加字母的验证码还是时不时被某些暴力营销软件骚扰呢?因为它们基本采用了OCR破解。至于如何使用OCR,本文不做讨论。有兴趣的可以GOOGLE一下。
关于如何防范OCR破解,大家可以学google,csdn等,他们的验证码的文字都是扭曲变形的,位置也是随机的;但飘易真正看好的是随机问题验证码,因为机器再怎么牛逼,它不具备人的
逻辑思维能力。比如你问机器:“福州的简称是什么?一个字”,“重庆大学地理位置属于哪个区?三个字”……
正是基于目前的自动化程序绝大多数采用OCR破解,所以飘易的另外一篇文章《
ASP生成Bmp图片验证码:数字相加求和》才有一些意义,但这种方法也有局限,如果破解者采用穷举法,很快就可以破解。所以,比较好的方法是同时采用两种验证码:一、采用数字+字母输入性验证码;二、采用需要人的逻辑思维能力回答的问题验证。这样,基本可以杜绝99%以上的恶意机器人的灌贴。