新闻动态
2021年春节放假通知
图片验证码识别包月产品特价来了!
2020年春节放假通知
图片验证码识别-包月版产品说明
2019年国庆放假通知!
对公转账支付和发票开具说明
春季验证码专场活动详情!
3.15钜惠活动详情!
验证码识别接口免费测试步骤
中国6家公司上榜全球AI初创企业100强

初步认识图形验证码

发布时间:2018-12-17 19:01:38

验证码作为一种辅助安全手段在Web安全中有着特殊的地位,验证码安全和web应用中的众多漏洞相比似乎微不足道,但是千里之堤毁于蚁穴,有些时候如果能绕过验证码,则可以把手动变为自动,对于Web安全检测有很大的帮助。


全自动区分计算机和人类的图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

大部分验证码的设计者都不知道为什么要用到验证码,或者对于如何检验验证码的强度没有任何概念。大多数验证码在实现的时候只是把文字印到背景稍微复杂点的图片上就完事了,程序员没有从根本上了解验证码的设计理念。


验证码的形式多种多样,先介绍最简单的纯文本验证码。

一、纯文本验证码

纯文本,输出具有固定格式,数量有限,例如:

•1+1=?•本论坛的域名是?•今天是星期几?•复杂点的数学运算

这种验证码并不符合验证码的定义,因为只有自动生成的问题才能用做验证码,这种文字验证码都是从题库里选择出来的,数量有限。破解方式也很简单,多刷新几次,建立题库和对应的答案,用正则从网页里抓取问题,寻找匹配的答案后破解。也有些用随机生成的数学公式,比如 随机数 [+-*/]随机运算符 随机数=?,小学生水平的程序员也可以搞定……

这种验证码也不是一无是处,对于很多见到表单就来一发的spam bot来说,实在没必要单独为了一个网站下那么大功夫。对于铁了心要在你的网站大量灌水的人,这种验证码和没有一样。


下面讲的是验证码中的重点,图形验证码。

二、图形验证码/图片验证码

先来说一下基础:

识别图形验证码可以说是计算机科学里的一项重要课题,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域……

简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正。对于颜色则有色彩空间的计算与转换,图形上色,阴影,色差处理等等。

在破解验证码中需要用到的知识一般是 像素,线,面等基本2维图形元素的处理和色差分析。常见工具为:

•支持向量机(SVM)•OpenCV•图像处理软件(Photoshop,Gimp…)•Python Image Library

支持向量机SVM是一个机器学习领域里常用到的分类器,可以对图形进行边界区分,不过需要的背景知识太高深。

OpenCV是一个很常用的计算机图像处理和机器视觉库,一般用于人脸识别,跟踪移动物体等等,对这方面有兴趣的可以研究一下

PS,GIMP就不说了,说多了都是泪啊……

Python Image Library是pyhon里面带的一个图形处理库,功能比较强大,是我们的首选。

1.jpg

SVM图像边界区分

2.jpg

SVM原理,把数据映射到高维空间,然后寻找能够分割的超平面

识别验证码需要充分利用图片中的信息,才能把验证码的文字和背景部分分离,一张典型的jpeg图片,每个像素都可以放在一个5维的空间里,这5个维度分别是,X,Y,R,G,B,也就是像素的坐标和颜色,在计算机图形学中,有很多种色彩空间,最常用的比如RGB,印刷用的CYMK,还有比较少见的HSL或者HSV,每种色彩空间的维度都不一样,但是可以通过公式互相转换。

3.jpg

RGB色彩空间构成的立方体,每个维度代表一种颜色

4.jpg

HSL(色相饱和度)色彩空间构成的锥体,可以参考:

https://zh.wikipedia.org/wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4

了解到色彩空间的原理,就可以用在该空间适用的公式来进行像素的色差判断,比如RGB空间里判断两个点的色差可以用3维空间中两坐标求距离的公式:

distance=sqrt[(r1-r2)2+(g1-g2)2+(b1-b2)^2]

更加直观的图片,大家感受一下:

5.jpg

随便把一张图片的每个像素都映射到RGB色彩空间里就能获得一个这样的立方体。

通过对像素颜色进行统计和区分,可以获得图片的颜色分布,在验证码中,一般来说使用近似颜色最多的像素都是背景,最少的一般为干扰点,干扰线和需要识别文字本身。

对于在RGB空间中不好区分颜色,可以把色彩空间转换为HSV或HSL:

6.jpg


下一节我们再讲讲验证码识别的原理,敬请关注尖叫数据


快速自动实现图片验证码识别,不用研究太多原理,最简单直接的方法就是直接购买现有的验证码识别接口服务。比如尖叫数据提供的:图片验证码识别-简单版图片验证码识别-复杂版,可以识别不同难度的验证码,如英文、数字、加减乘除以及识别指定颜色的验证码。

上一篇:网站为什么要设置验证码?
下一篇:图像识别方法分析

周一至周五 9:00-18:00

尖叫网络

尖叫数据