掌桥专利:专业的专利平台
掌桥专利
首页

一种用于生成防破解图形验证码的方法和系统

文献发布时间:2023-06-19 13:26:15


一种用于生成防破解图形验证码的方法和系统

技术领域

本发明涉及验证码的技术领域,主要涉及用于生成防破解图形验证码的方法和系统。

背景技术

全自动区分计算机和人类的图灵测试(Completely Automated Public Turingtest to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。验证码的主要目的是强制人机交互来抵御机器自动化攻击,为了确保服务器系统的稳定和用户信息的安全,绝大多数的网站都采用了验证码技术。

图形验证码是目前最常用的一种验证码,本质为将一串随机产生的数字或符号,即验证字符,生成一幅图片,图片里加上一些干扰素,由用户肉眼识别其中的信息,输入正确的验证字符,提交网站验证,验证通过后才能使用某项功能。

但如今随着光学字符识别技术(Optical Character Recognition,简称OCR)的发展,机器识别验证码越来越容易,准确率也越来越高。识别步骤一般分为图片清理,字符分割,字符识别等。最关键的图片清理中又有例如去干扰素(例如,通过干扰素的RGB值范围规律,去除干扰素),灰度化(例如,将彩色的验证码转换成灰色,方便后续处理),二值化(例如,将灰度化了的验证码进一步转换成黑白二色图),去噪点(例如,去除之前步骤中遗留的黑色残留)等等手段。

由于图形验证码中的干扰素的一个重要特征是,不能影响验证码的显示效果,所以制作干扰素时它的RGB可能低于或者高于某个特定值,往往RGB值固定在某个范围,并与验证码相互独立,这使得去除干扰素只需要通过对RGB特定值的区分就可以做到。此外,验证码的字符又多为形式规整,颜色相同的数字或字母形式,即便通过粘连或扭曲字符的方式增加难度,只要通过更优化的算法,更全面的机器学习,仍旧使得机器识别验证码变得可能。如果无法分辨机器还是人在进行验证码输入,图形验证码也就失去了本身的意义。

此外,目前的干扰素一般为例如:背景干扰(诸如添加线条,添加背景色等),噪声点像素,字体形变或累叠等。但是,字符的形变或累叠会给正常用户造成难以辨认字符的情况,添加背景色也会使得某些对颜色辨认不佳的正常用户产生困扰。

因此,需要一种技术来加固图形验证码的安全性,在防止机器准确识别出图形验证码中的验证字符的同时提升正常用户对图形验证码的识别性,从而达到防恶意注册,暴力破解,提供用户友好的界面等目的,维护网站安全与产品功能正常。

发明内容

提供本发明内容以便以简化形式介绍将在以下具体实施方式中进一步的描述一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。

根据本发明的一个实施例,公开了一种用于呈现图形验证码的方法,包括:生成原始验证字符,其中原始验证字符包括至少两个字符;对原始验证字符进行扰序操作以生成经扰序的验证字符,其中经扰序的验证字符中至少一个字符的排序相较于原始验证字符被改变;将原始验证字符与经扰序的验证字符进行比对,以标识出经扰序的验证字符中各个字符在原始验证字符中的正确排序;选择要应用于经扰序的验证字符的矢量标识,其中矢量标识是用于在视觉上标识经扰序的验证字符中各个字符在原始验证字符中的正确排序的图形;以及根据经扰序的验证字符、经扰序的验证字符中各个字符在原始验证字符中的正确排序以及矢量标识来呈现所述图形验证码。

根据本发明的另一个实施例,公开了一种用于呈现图形验证码的系统,包括:验证字符生成模块,该验证字符生成模块被配置为生成原始验证字符,其中原始验证字符包括至少两个字符;验证字符扰序模块,该验证字符扰序模块被配置为对原始验证字符进行扰序操作,以生成经扰序的验证字符,其中经扰序的验证字符中至少一个字符的排序相较于原始验证字符被改变;矢量标识模块,该矢量标识模块被配置为将原始验证字符与经扰序的验证字符进行比对,以标识出经扰序的验证字符中各个字符在原始验证字符中的正确排序,选择要应用于经扰序的验证字符的矢量标识,其中矢量标识是用于在视觉上标识经扰序的验证字符中各个字符在原始验证字符中的正确排序的图形;以及呈现模块,该呈现模块被配置为根据经扰序的验证字符、经扰序的验证字符中各个字符在原始验证字符中的正确排序以及矢量标识来呈现图形验证码。

根据本发明的又一个实施例,公开了一种用于呈现图形验证码的计算设备,包括:处理器;存储器,所述存储器存储有指令,该指令在被处理器执行时能执行如上所述的方法。

通过阅读下面的详细描述并参考相关联的附图,这些及其他特点和优点将变得显而易见。应该理解,前面的概括说明和下面的详细描述只是说明性的,不会对所要求保护的各方面形成限制。

附图说明

为了能详细地理解本发明的上述特征所用的方式,可以参照各实施例来对以上简要概述的内容进行更具体的描述,其中一些方面在附图中示出。然而应该注意,附图仅示出了本发明的某些典型方面,故不应被认为限定其范围,因为该描述可以允许有其它等同有效的方面。

图1示出了现有技术中的常见图形验证码100;

图2示出了现有技术中用于例如图1的图形验证码100的生成过程200以及识别结果示例204;

图3示出了根据本发明的一个实施例的对图1的图形验证码100进行改进后的图形验证码300;

图4示出了根据本发明的一个实施例的对图1的图形验证码100进行改进后的另一图形验证码400;

图5示出了根据本发明的一个实施例的针对图3的图形验证码300和图4的图形验证码400的识别结果示例500;

图6示出了根据本发明的一个实施例的用于呈现图形验证码的系统600;

图7示出了根据本发明的一个实施例的用于呈现图形验证码的方法700;以及

图8示出了根据本发明的一个实施例的示例性计算设备的框图800。

具体实施方式

下面结合附图详细描述本发明,本发明的特点将在以下的具体描述中得到进一步的显现。

本发明通过在图形验证码中增加矢量标识的方式,改变原始验证字符的呈现顺序,使得机器识别验证码步骤中,去干扰素的同时丢失真实信息,达到保护验证码不被破解的目的。

图1示出了现有技术中的常见图形验证码100。该图形验证码100包括验证字符“2907”以及干扰素101。可以看到,该干扰素101呈现为穿插在字符“2907”中的线条。当使用该图形验证码100进行验证时,如果接收到“2907”的输入字符,则可视为校验通过。

图2示出了现有技术中用于例如图1的图形验证码100的呈现过程200以及识别结果示例204。在201,随机生成验证字符(例如,一个或多个数字、字母、文字等)。在202,生成一个或多个干扰素。在203,将一个或多个干扰素应用于生成的验证字符,以呈现图形验证码。

在针对图1的图形验证码100的识别结果示例204中,在将图形验证码100呈现给用户之后,用户可通过肉眼辨别等方式输入验证字符,即“2907”。而机器可利用现有的去干扰素,灰度化,二值化等技术手段,同样识别出验证字符“2907”,从而通过验证,导致潜在的网站不安全性。

本发明对原始验证字符进行扰序操作,生成经扰序的验证字符,并对该经扰序的验证字符应用矢量标识,进而呈现验证码。通过矢量标识,用户可以容易识别出实际的原始验证字符,从而校验通过;但机器识别时,利用现有的去干扰素,灰度化,二值化等技术手段,会因为无法区分矢量标识与干扰素,而只能全部过滤得到经扰序的验证码,从而校验失败。由此,本发明实现了加固图形验证码,区分机器和用户操作,保护网站安全的目的。

图3示出了根据本发明的一个实施例的对图1的图形验证码100进行改进后的图形验证码300。根据图3可看出,与图1的图形验证码100相比,图形验证码300中呈现的字符的顺序是变化了的,即,并非按照验证字符“2907”的顺序显示。在下文针对图3和图4的描述中,根据图1的示例,“2907”可被视为原始验证字符,而“2790”可被视为经扰序的验证字符。

根据图3可看出,图形验证码300中采用矢量标识301来向用户指示经扰乱的验证字符的正确顺序,使得用户能够了解经扰乱的验证字符实则应该为“2907”,而非从左往右的“2790”。此外,与图1的图形验证码100类似,图形验证码300中还采用了具有贯穿字符中间的线条形式的干扰素302。

在图形验证码300中,矢量标识301被呈现为从原始验证字符中按顺序排列的第一个字符(即,“2”)开始到原始验证字符中按顺序排列的最后一个字符(即,“7”)结束的一组线段,该组线段中的每个线段连接按原始验证字符中的顺序排列的相邻字符。例如,该组线段中的第一个线段为“2”到“9”,第二个线段为“9”到“0”,第三个线段为“0”到“7”。即,通过该矢量标识301,用户能够识别出原始验证字符应该为“2907”,而非“2790”。虽然,在图形验证码300的示例中,每个线段上均标记有指示字符排序方向的箭头,以使得用户更加容易地知晓字符顺序,但是在其他实施例中也可不标记箭头。

图4示出了根据本发明的一个实施例的对图1的图形验证码100进行改进后的另一图形验证码400。与图3的图形验证码300相比,图形验证码400中的矢量标识401为从原始验证字符中的第一个字符(即,“2”)开始到原始验证字符中按顺序排列的最后一个字符(即,“7”)结束,按原始验证字符中各字符的顺序依次连接每个字符的一条线段。虽然与图3的图形验证码300相比没有采用箭头,但是依据实际的从左往右的阅读习惯,用户依然能够识别出原始验证字符应该为“2907”,而非“2790”。此外,图形验证码400与图形验证码300相比,没有采用干扰素。

在本发明的上下文中,矢量标识是用于在视觉上标识经扰乱的验证字符中各个字符在原始验证字符中的正确排序的图形。图形验证码300和400中的矢量标识301和401仅仅是示意性的,其他样式的矢量标识也可被应用。例如,可以在按原始验证字符的顺序排列的第一个字符下加上一条下划线,在按原始验证字符的顺序排列的第二个字符下加上两条下划线,以此类推。本领域的技术人员能够理解,各种类型和样式的能够引导用户输入正确顺序的验证字符的矢量标识均在本发明的范围之内。

图5示出了根据本发明的一个实施例的针对图3的图形验证码300和图4的图形验证码400的识别结果示例500。当用户用肉眼识别图形验证码300和400时,虽然所显示的字符顺序并不正确,但是在矢量标识的帮助下,能够得到正确的原始验证字符“2907”,由此通过校验。

根据本发明的一个实施例,矢量标识的生成方式与现有技术中的干扰素的生成方式相似,即制作矢量标识时它的RGB可以低于或者高于某个特定值,并与验证字符的RGB相互独立。因此,当机器对图形验证码300和400进行识别时,在进行干扰素去除的过程中,矢量标识可与干扰素一起被去除。由此,机器将得到去除矢量标识后的显示为“2790”的经扰序的验证字符,从而获得与验证字符“2907”不相符合的经扰序的验证字符,由此导致校验失败。

图6示出了根据本发明的一个实施例的用于呈现图形验证码的系统600。如图6中示出的,该系统600按模块进行划分,各模块之间通过本领域已知的方式进行通信和数据交换。在本发明中,各模块可通过软件或硬件或其组合的方式来实现。该系统600可包括验证字符生成模块601,验证字符扰序模块602,矢量标识模块603,干扰素模块604和呈现模块605。

针对每一个图形验证码,验证字符生成模块601、验证字符扰序模块602、矢量标识模块603、干扰素模块604可协作生成一条包含以下字段中的一者或多者的图形验证码条目:原始验证字符字段,经扰序的验证字符字段,正确排序字段,矢量标识字段,干扰素字段。呈现模块605可基于该条目来呈现图形验证码。如本领域的技术人员所知的,该生成的图形验证码条目可被存储在数据库中或被高速缓存。

验证字符生成模块601被配置为生成原始验证字符。根据本发明的一个实施例,原始验证字符可被随机生成。根据本发明的另一个实施例,该原始验证字符可作为原始验证字符字段来被存储或高速缓存。例如,根据图3的示例,原始验证字符字段可被记载为(2,9,0,7)。在本发明的上下文中,原始验证字符中各个字符的顺序为正确顺序。

验证字符扰序模块602被配置为对验证字符生成模块601生成的原始验证字符进行扰序操作,以生成经扰序的验证字符。根据本发明的一个实施例,扰序可按各种扰序算法来进行,使得经扰序的验证字符中一个或多个字符的排列顺序与原始验证字符中相应字符的排列顺序不一致。根据本发明的另一个实施例,该经扰序的验证字符可作为经扰序的验证字符字段来被存储或高速缓存。例如,根据图3的示例,经扰序的验证字符字段可为(2,7,9,0)。

矢量标识模块603被配置为对原始验证字符和经扰序的验证字符进行比对,以标识经扰序的验证字符中各个字符在原始验证字符中的正确排序,并选择要应用于经扰序的验证字符的矢量标识。

根据本发明的一个实施例,矢量标识模块603可将经扰序的验证字符中各个字符在原始验证字符中的正确排序作为正确排序字段来进行存储或高速缓存。例如,根据图3的示例,在将原始验证字符“2907”和经扰序的验证字符“2790”进行比对之后,可得出正确排序字段为(1,4,2,3)。其中,“1”表示经扰序的验证字符中的第一个字符“2”在原始验证字符中的位置为第一个,即为1;“4”表示经扰序的验证字符中的第二个字符“7”在原始验证字符中的位置为第四个,即为4;“2”表示经扰序的验证字符中的第三个字符“9”在原始验证字符中的位置为第二个,即为2;“3”表示经扰序的验证字符中的第四个字符“0”在原始验证字符中的位置为第三个,即为3。

根据本发明的另一个实施例,矢量标识模块603可被配置成根据预先定义的规则或实际需要来从一个或多个预先定义的矢量标识中选择合适的或默认的矢量标识以供呈现。根据本发明的一个实施例,矢量标识是被呈现来用于在视觉上标识经扰序的验证字符的正确顺序的图形。例如,矢量标识可包括带有箭头的线段,一条线段,下划线等等。例如,如果验证字符的个数较少,则可选择下划线标识来标识字符顺序,而如果验证字符的个数较多,则线段形式的矢量标识可能更为合适。根据本发明的一个实施例,所选择的矢量标识的编号或类型作为矢量标识字段来存储或高速缓存。

干扰素模块604被配置为选择一种或多种干扰素,以与应用了矢量标识的经扰序的验证字符相结合地使用。根据本发明的一个实施例,干扰素模块604可被配置为根据预定的规则或实际需要来选取适合的干扰素以进行呈现。例如,干扰素模块604被配置为选择与矢量标识相区分地来呈现。例如,如图3中所示的,在矢量标识为具有箭头的线段的情况下,可采用贯穿字符的线条形式来作为干扰素,从而不给用户造成识别上的困扰。而在例如图4中所示的采用贯穿字符的线条形式的矢量标识的情况下,如果也选取线条形式的干扰素,可能会给用户造成视觉上的困扰,无法清晰地分辨哪条线条是指示字符顺序的矢量标识,因此,在这种情况下,干扰素模块604可选取例如改变背景颜色或字体颜色/形状等来作为干扰素。

根据本发明的一个实施例,所选择的干扰素的编号或类型作为干扰素字段被存储或高速缓存。

根据本发明的另一个实施例,干扰素模块604是可选的,即,可在不使用干扰素的情况下来生成图形验证码。

呈现模块605被配置为根据经扰序的验证字符、经扰序的验证字符中各个字符在原始验证字符中的正确排序、所选择的矢量标识和/或所选择的干扰素来呈现图形验证码。根据本发明的一个实施例,呈现模块605基于图形验证码条目来进行呈现。所呈现的图形验证码包括经扰序的验证字符(经扰序的验证字符中的每个字符按从左到右的顺序显示),被应用于经扰序的验证字符的矢量标识(该矢量标识根据正确排序字段来指示正确的字符顺序)和/或所选择的干扰素(如果有的话)。

例如,根据图3的示例,呈现模块605可根据图形验证码条目{(2,9,0,7),(2,7,9,0),(1,4,2,3),(带有箭头的线段),(线条)}来呈现图形验证码。其中,经扰序的验证字符“2790”中的每一个字符依次从左到右显示,作为矢量标识的带有箭头的线段被应用于该经扰序的验证字符以根据正确排序字段(1,4,2,3)来指示每个字符的正确顺序,同时,作为干扰素的线条被显示为贯穿字符。本领域的技术人员完全可以理解,矢量标识和干扰素这两个字段也可用相应的矢量标识编号和干扰素编号或其他标记来记录,以上仅仅是一个示例。

例如,根据图4的示例,呈现模块605可根据形验证码条目{(2,9,0,7),(2,7,9,0),(1,4,2,3),(一条线段)}来呈现图形验证码。其中,经扰序的验证字符“2790”中的每一个字符依次从左到右显示,作为矢量标识的一条线段被应用于该经扰序的验证字符以根据正确排序字段(1,4,2,3)来指示每个字符的正确顺序。在此示例中,干扰素没有被应用。

图7示出了根据本发明的一个实施例的用于呈现图形验证码的方法700。在步骤701,生成原始验证字符。根据本发明的一个实施例,该原始验证字符包括至少两个字符。字符可以为数字、字母或文字。

在步骤702,对原始验证字符进行扰序操作以生成经扰序的验证字符。根据本发明的一个实施例,经扰序的验证字符中至少一个字符的排序相较于原始验证字符被改变。

在步骤703,将原始验证字符与经扰序的验证字符进行比对,以标识出经扰序的验证字符中各个字符在原始验证字符中的正确排序。

在步骤704,选择要应用于经扰序的验证字符的矢量标识。根据本发明的一个实施例,矢量标识是用于标识经扰序的验证字符中各个字符在原始验证字符中的正确排序的图形。

任选地,在步骤705,选择干扰素。根据本发明的一个实施例,干扰素可包括背景干扰(诸如添加线条,添加背景色等),噪声点像素,字体形变或累叠等。根据本发明的一个实施例,干扰素与矢量标识在视觉上是可区分的,不会使得用户难以辨认。根据本发明的一个实施例,步骤705可被排除,即可不选择干扰素来生成图形验证码。

在步骤706,根据经扰序的验证字符、经扰序的验证字符中各个字符在原始验证字符中的正确排序、所选择的矢量标识和/或所选择的干扰素来呈现图形验证码。根据本发明的一个实施例,在图形验证码中,经扰序的验证字符中的每个字符依次从左到右显示。所选择的矢量标识被应用于经扰序的验证字符,以标识经扰序的验证字符中各个字符在原始验证字符中的正确排序。

根据一个实施例,矢量标识被呈现为一组线段,该组线段中的每个线段连接经扰序的验证字符中按原始验证字符中的正确排序排列的相邻字符,该组线段中的第一个线段的起点为经扰序的验证字符中在原始验证字符中排列第一的字符,该组线段中的最后一个线段的终点为经扰序的验证字符中在原始验证字符中排列最后的字符。根据本发明的一个实施例,每条线段上可具有指示字符排序方向的箭头。

根据另一个实施例,矢量标识被呈现为一条线段,该条线段从经扰序的验证字符中在原始验证字符中排列第一的字符开始,按经扰序的验证字符中各个字符在原始验证字符中的正确排序依次连接经扰序的验证字符中的各个字符,直到经扰序的验证字符中在原始验证字符中排列最后的字符结束。

在有干扰素的情况下,在呈现图形验证码时,所选择的干扰素被应用。

图8示出了根据本发明的一个实施例的示例性计算设备的框图800,该计算设备是可应用于本发明的各方面的硬件设备的一个示例。参考图8,现在将描述一种计算设备800,该计算设备是可应用于本发明的各方面的硬件设备的一个示例。根据本发明的一个实施例,图6的用于呈现图形验证码的系统600可被实现在计算设备800上。计算设备800可以是可被配置成用于实现处理和/或计算的任何机器,可以是但并不局限于工作站、服务器、桌面型计算机、膝上型计算机、平板计算机、个人数字处理、智能手机、车载计算机或者它们的任何组合。计算设备800可包括可经由一个或多个接口和总线802连接或通信的组件。例如,计算设备800可包括总线802、一个或多个处理器804、一个或多个输入设备806以及一个或多个输出设备808。该一个或多个处理器504可以是任何类型的处理器并且可包括但不限于一个或多个通用处理器和/或一个或多个专用处理器(例如,专门的处理芯片)。输入设备806可以是任何类型的能够向计算设备输入信息的设备并且可以包括但不限于鼠标、键盘、触摸屏、麦克风和/或远程控制器。输出设备808可以是任何类型的能够呈现信息的设备并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。计算设备800也可以包括非瞬态存储设备810或者与所述非瞬态存储设备相连接,所述非瞬态存储设备可以是非瞬态的并且能够实现数据存储的任何存储设备,并且所述非瞬态存储设备可以包括但不限于磁盘驱动器、光存储设备、固态存储器、软盘、软磁盘、硬盘、磁带或任何其它磁介质、光盘或任何其它光介质、ROM(只读存储器)、RAM(随机存取存储器)、高速缓冲存储器和/或任何存储芯片或盒式磁带、和/或计算机可从其读取数据、指令和/或代码的任何其它介质。非瞬态存储设备810可从接口分离。非瞬态存储设备810可具有用于实施上述方法和步骤的数据/指令/代码。计算设备800也可包括通信设备812。通信设备812可以是任何类型的能够实现与内部装置通信和/或与网络通信的设备或系统并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信设备和/或芯片组,例如蓝牙设备、IEEE 1302.11设备、WiFi设备、WiMax设备、蜂窝通信设备和/或类似设备。

总线802可以包括但不限于工业标准结构(ISA)总线、微通道结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线和外部设备互连(PCI)总线。

计算设备800还可包括工作存储器814,该工作存储器814可以是任何类型的能够存储有利于处理器804的工作的指令和/或数据的工作存储器并且可以包括但不限于随机存取存储器和/或只读存储设备。

软件组件可位于工作存储器814中,这些软件组件包括但不限于操作系统816、一个或多个应用程序818、驱动程序和/或其它数据和代码。用于实现本发明上述方法和步骤的指令可包含在所述一个或多个应用程序818中,并且可通过处理器804读取和执行所述一个或多个应用程序818的指令来实现本发明的上述方法700。

也应该认识到可根据具体需求而做出变化。例如,也可使用定制硬件、和/或特定组件可在硬件、软件、固件、中间件、微代码、硬件描述语音或其任何组合中实现。此外,可采用与其它计算设备、例如网络输入/输出设备等的连接。例如,可通过具有汇编语言或硬件编程语言(例如,VERILOG、VHDL、C++)的编程硬件(例如,包括现场可编程门阵列(FPGA)和/或可编程逻辑阵列(PLA)的可编程逻辑电路)利用根据本发明的逻辑和算法来实现所公开的方法和设备的部分或全部。

尽管目前为止已经参考附图描述了本发明的各方面,但是上述方法和设备仅是示例,并且本发明的范围不限于这些方面,而是仅由所附权利要求及其等同物来限定。各种组件可被省略或者也可被等同组件替代。另外,也可以在与本发明中描述的顺序不同的顺序实现所述步骤。此外,可以按各种方式组合各种组件。也重要的是,随着技术的发展,所描述的组件中的许多组件可被之后出现的等同组件所替代。

相关技术
  • 一种用于生成防破解图形验证码的方法和系统
  • 一种防破解的验证码生成方法
技术分类

06120113678174