CN104618350B - 一种图片验证码的生成方法 - Google Patents
一种图片验证码的生成方法 Download PDFInfo
- Publication number
- CN104618350B CN104618350B CN201510019296.6A CN201510019296A CN104618350B CN 104618350 B CN104618350 B CN 104618350B CN 201510019296 A CN201510019296 A CN 201510019296A CN 104618350 B CN104618350 B CN 104618350B
- Authority
- CN
- China
- Prior art keywords
- picture
- long
- reference base
- generation
- stable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明涉及一种图片验证码生成的方法,包括首先生成背景图片,加入4个随机生成的字符和数字、噪点、干扰线,由此生成基准图片,并给基准图片随机编号;然后,以基准图片为母板,生成多幅扭曲的图片,并给新生成扭曲的图片编号,并与基准图片按照编号组成一张长图发送给客户端,用户拖动长图挑选出基准图片以此进行验证。该验证方法,通过采用行为式验证获得更高安全、能有效阻止机器人攻击且不需要通过传统键盘输入。
Description
技术领域
本发明设计计算机领域,特别涉及一种图片验证码的生成方法。
背景技术
信息技术和网络通讯的高速发展在给我们带来便利的同时也滋生了一系列不安定因素。如垃圾邮件的攻击、批量注册分发被盗资源、在线投票系统上的虚假投票,使得网络的真实性、安全性无法保证。目前网站普遍采用了验证码技术来应对这一问题。
信息技术和网络通讯的高速发展再给我们带来便利的同时也滋生了一系列不安定因素。如垃圾邮件的攻击、批量注册分发被盗资源、在线投票系统上的虚假投票,使得网络的真实性、安全性无法保证。为了保证互联网的安全,不少网站采用了验证码技术。
验证码(CAPTCHA,Completely Automated Public Turing test to tellComputers and Humans Apart)全称为全自动区分计算机和人类的图灵测试,起源于1997的AltaVista,目的是阻止URL的自动提交,其基本形式是:在每次向网页提交信息的时候,系统会自动随机产生一串数字或符号(即验证码),只有在指定的地方正确输入这
些验证码才能成功提交信息。验证码技术能解决恶意程序对论坛不断发表信息这一问题。
从最初的本文数字添加噪点的验证码到现在各式各样的涉及声音、视频多方面的验证码,各方面专家和学者做出了努力,目前比较主流的是加入噪点干扰线,并对数字或者字母做进行适当扭曲形变的图片验证码,卡耐基梅隆大学后阶段推出的recaptcha,比较新颖的还有一些数学公式验证码、小游戏验证码。
由于OCR技术,尤其是人工智能的发展,许多验证码的破解已不是难题,简单的数字图片验证码可由分割加上识别算法顺利通过。继续添加干扰和噪点可以有效阻止分割,却使得大部分用户自身都无法正确识别图片,大大降低了用户体验度。许多新推出的游戏验证码可以较好解决这个问题,但是,其复杂度和数据有限性使得这种验证码也无法广泛使用。
DCG即动态认知游戏,该验证码挑战用户执行一个类似游戏的认知任务。DCG验证码具有高可用性而且不像其他已知的验证码,对于中继攻击添加了一些阻力,但他们也容易受到我们的新的基于字典的自动化攻击。如公开于2012年12月20日的申请号为US20120323700 A1的美国专利公开了一种验证码技术方案,该验证码要求用户完成一个任务,即生成一排有一定顺序的物体,由用户判断并将符合条件的物体拖动到指定位置,如正确完成操作,通过验证,这种非验证码对OCR等有很好的阻止作用,但是由于数据库本身的局限性而无法抵挡暴力攻击也不利于推广,形式复杂。
传统字符验证码,将一串随机产生的数字或符号,生成一幅图片,在所述图片中增加一些干扰线、噪点,局部膨胀或扭曲等,来生成一张验证码图片,因其数据量大可以有效应对穷举攻击,但是OCR(Optical Character Recognition,光学字符识别)技术的发展使之已经缺乏安全性。
因此,现有的验证码技术存在不足,有必要改进。
发明内容
本发明所要解决的技术问题是提供一种通过采用行为式验证获得更高安全、能有效阻止机器人攻击且不需要通过传统键盘输入来验证的图片验证码生成的方法。
为了解决上述问题,本发明提供的技术方案如下:
一种图片验证码生成的方法,包括以下步骤:
(1)客户端发送获取验证码请求;
(2)服务端接收客户端请求并做如下处理:
步骤A,生成基准图:
A1、生成四位随机字符写入图片,并在所述的图片中绘制噪点和干扰线,在服务器端保存此图片作为基准图片;
A2、生成一个[0,N-1],N为大于或等于2的整数,的随机数字T作为基准图片编号,并在服务器端保存;
步骤B,以基准图片母版,生成N-1张基准图片的拷贝图片,并用依次[0,N-1]且不等于T的数字作为N-1张拷贝图片的编号P;
步骤C,分别对每张张拷贝图片做扭曲处理:
C1、将该张拷贝图片按X行Y列划分为X*Y个小方格,X、Y均为大于或等于4的整数,并将每个方格从上往下从左往右依次编号为0、1、2、3至X*Y。
C2、给该张拷贝图片设定一个参数stable;并通过如下方式求取stable的值:
其中,i=P-T,
C3、根据stable的值,通过如下方式打乱该张拷贝图片中方格的排列顺序,生成扭曲图片:
当stable=0时,图片不发生任何改变;
当stable为正值时,将编号为0至stable-1方格的顺序打乱;
当stable值为负值时,将编号为X*Y-stable+1至X*Y-1方格的顺序打乱;
步骤D,生成长图:
D1、将扭曲处理后的N-1张拷贝图片和基准图片按编号从小到大的顺序排列拼接生成一张长图图;
D2、将生成的长图图片发送给客户端;
(3)客户端接收长图并接受用户验证,操作如下:
E1、客户端接收到长图并随机显示长图中的一副图片给用户:
E2、用户拖动长图图片,选择出其中的一副图片,提交;
E3、跟据用户选择的图片向服务端发送该图片的编号;
(4)服务端验证:
服务端接收客户端返回的编号,并将编号与预存基准图片编号T对比,如果一样,则通过验证,否则验证失败,重复步骤(2)。
优选地,步骤A中所述的随机字符是通过线性同余法生成的。
优选地,所述的E2步骤,在显示给用户的长图图片的下方添加有滑块组件,使用户通过左右移动滑块来左右拖动长图图片。
优选地,所述的A1步骤中,首先将该基准图片压缩成50*50px至500*500px后再将该图片保存。
6.根据权利要求1所述的验证码实现方法,其特征在于:步骤D中的步骤D1是将N-1张拷贝图片和基准图片按编号从小到大的顺序排列拼接生成一张首尾相接的长图图。
本发明所公开的验证码相较于其他验证码的优点在于:
1、界面友好,操作简单,由于验证过程是通过拖动长图选择其中的一副图片来实现验证的,不需要通过传统键盘输入来验证,特别适合触屏手机、IPad等移动终端设备。
2、行为式验证使得安全性更高。传统验证码仅基于计算机图形的防护,而本发明采用的行为式验证技术如安全性更高。
3、本发明采用的的扭曲算法使编号大小越接近基准图片的拷贝图片扭曲越轻,编号越接近基准图片的拷贝图片扭曲越轻,最终将所有图片按照编号拼接成一张长图时形成了越靠近基准图片的部分扭曲越轻,越远离基准图片位置的部分扭曲越严重,可在保证安全的情况先,方便用户验证。
附图说明
图1为本发明一个具体实施例的生成验证码的流程图;
图2为本发明一个具体实施例中单张图片中方格编号示意图,(a)为对拷贝图片初始划分为方格编号示意图,(b)为扭曲处理后新生成的图片中方格编号示例。
图3为为本发明一个具体实施客户端验证显示的示意图,其中(a)为初始页面,(b)为正确滑块位置页图。
具体实施方式
为了使本领域的技术人员更好的理解本申请的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整的描述。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
一种图片验证码的生成的方法,包括以下步骤:
步骤A,在服务端(本发明中服务端与服务器端是同一概念)生成基准图:
A1、生成四位随机字符写入一张空白图片,并在所述的图片中绘制噪点和干扰线,在服务器端保存此图片作为基准图片;随机数字在图片中的占据的位置交大,最好是数字充满了图片。
A2、生成一个[0,N-1],N为大于或等于2的整数,的随机数字T作为基准图片编号,并在服务器端保存;
步骤B,服务端生成拷贝图:
以基准图片母版,生成N-1张基准图片的拷贝图片,并用依次[0,N-1]且不等于T的数字作为N-1张拷贝图片的编号P;
步骤C,服务端对拷贝图扭曲处理,分别对每张张拷贝图片进行扭曲处理。
步骤D,服务端生成长图:
D1、将扭曲处理后的N-1张拷贝图片和基准图片按编号从小到大的顺序排列拼接生成一张长图图;
D2、将生成的长图图片发送给客户端;
步骤E,客户端验证:
E1、客户端接收到长图,并只显示长图中的一副图片给用户:
E2、户选择向左或向右拖动长图图片,选择出其中的一副图片,提交;
E3、向服务端发送客户选择的图片的编号。
步骤F,服务端验证:
服务端接收客户端返回的编号,并将编号与预存基准图片编号T对比,如果一样,则通过验证,否则验证失败,返回步骤A。
其中,步骤C所述的对拷贝图扭曲处理可以采用如下方法实现扭曲处理:
C1、将该张拷贝图片按X行Y列划分为X*Y个小方格,X、Y均为大于或等于4的整数,并将每个方格从上往下从左往右依次编号为0、1、2、3至X*Y。
C2、给该张拷贝图片设定一个参数stable;并通过如下方式求取stable的值:
其中,i=P-T,
C3、根据stable的值,通过如下方式打乱该张拷贝图片中方格的排列顺序,生成扭曲图片:
当stable=0时,图片不发生任何改变;
当stable为正值时,将编号为0至stable-1方格的顺序打乱;
当stable值为负值时,将编号为X*Y-stable+1至X*Y-1方格的顺序打乱;
步骤E中的E2步骤,可以在显示给用户的长图图片的下方添加滑块组件,使用户通过左右移动滑块来左右拖动长图图片。
作为对前述方案的一种改进,D1步骤中生成的长图收尾相接。这样,用户只需要向一个方向拖动长图片就可以浏览所有图片。
具体实施例
以N=30,X=8,Y=8为例,举例说明本发明工作流程。
如图1所示,生成验证码的流程图:
包括如下步骤:
(1)客户端向服务器发送长图图片请求。
(2)服务器端接收“发送长图图片请求”请求并做如下处理:
调用Math.random()生成四位随机字符(0-9,A-Z),并调用java.awt.Graphics类将随机字符写入图片,并绘制噪点和干扰线;将该图片压缩成64*64px的大小,并将此图片作为基准图片保存。
调用Math.random()生成一个[0,29]的随机数T=20,作为基准图片编号,并在服务器端保存。
将基准图片复制29份生成拷贝图片,并将每张拷贝图片做如下扭曲处理:
将该张拷贝图片按8行8列划分为方格,并从上往下从左往右对方格依次编号为0、1、2、3至63。
求取该张拷贝图片的stable的值。根据前述生成图片验证码的方法代入每张图片的编号求取stable值。如图3所示,可求得以基准图片编号T=20为例,编号0至19的拷贝图片的stable值依次为-76、-72、-68、-64…-12、-8、-4,编号为21至30的拷贝图片的stable值依次为4、8、16、20…40。
根据stable值做如下处理生成扭曲图片。当stable为正值时,将编号为0至stable-1方格的顺序打乱;当stable值为负值时,将编号为X*Y-stable+1至X*Y-1方格的顺序打乱。例如,当stable值为8时,将顺序数列0、1、2、3、4、5、6、7随机打乱,形成新数列4、3、6、7、2、0、1、5,依照此新数列将对应编号的方格移动排列。
移动方格是通过处理每一个方格中的像素来实现移动的。假设处理像素时设当前点为(x,y),将要移到编号为new的方格相对位置,则新位置坐标(newX,newY):
newX=[new/divX]*divXrange+x-[x/divXrange]*divXrange
newY=([new mod divY])*divYrange+y-[y/divYrange]*divYrange
其中,divX代表每行所分格数,divY代表每列所分格数,divXrange代表每格宽,divYrange代表每格高,[]代表向下取整,mod代表求余。编号8至36的方格位置不变,由此生成一张新的图片。
又如,当stable值为-8时,将拷贝图片中编号29至36的方格位置打乱,而编号0至28的方格不变。
将进过扭曲处理后的所有拷贝图片和基准图按编号数字的大小连接为一张长图。连接的方法为,预先分配长图存储空间,各个子图按像素点复制到长图对应位置,类似电影胶卷。并将生成的长图发送给客户端显示。
(3)客户端
客户端接收长图图片,并随机显示长图片的中的一部分(一副图片)给用户。并在显示图片的下方添加有滑块组件,用户通过左右移动滑块来左右拖动长图图片,以此查看、选择长图的不同部分的图片,如图3所示。用户通过拖动滑块,选出自认为是基准图片(没有没扭曲过的那张图片)的那张图片,并提交,此时客户端将用户选中的图片编号传回服务器端。
(4)服务器将收到的客户端返回的编号与与保存的基准图片的编号是否一致,如果一致则通过验证,否则验证失败,返回到步骤(2)。
Claims (6)
1.一种图片验证码的生成的方法,其特征在于,包括以下步骤:
(1)客户端发送获取验证码请求;
(2)服务端接收客户端请求并做如下处理:
步骤A,生成基准图:
A1、生成四位随机字符写入图片,并在所述的图片中绘制噪点和干扰线,在服务器端保存此图片作为基准图片;
A2、生成一个[0,N-1],N为大于或等于2的整数,随机数字T作为基准图片编号,并在服务器端保存;
步骤B,以基准图片母版,生成N-1张基准图片的拷贝图片,并用依次[0,N-1]且不等于T的数字作为N-1张拷贝图片的编号P;
步骤C,分别对每张张拷贝图片做扭曲处理:
C1、将该张拷贝图片按X行Y列划分为X*Y个小方格,X、Y均为大于或等于4的整数,并将每个方格从上往下从左往右依次编号为0、1、2、3至X*Y;
C2、给该张拷贝图片设定一个参数stable;并通过如下方式求取stable的值:
其中,i=P-T,
C3、根据stable的值,通过如下方式打乱该张拷贝图片中方格的排列顺序,生成扭曲图片:
当stable=0时,图片不发生任何改变;
当stable为正值时,将编号为0至stable-1方格的顺序打乱;
当stable值为负值时,将编号为X*Y-stable+1至X*Y-1方格的顺序打乱;
步骤D,生成长图:
D1、将扭曲处理后的N-1张拷贝图片和基准图片按编号从小到大的顺序排列拼接生成一张长图图片;
D2、将生成的长图图片发送给客户端;
(3)客户端接收长图并接受用户验证,操作如下:
E1、客户端接收到长图并随机显示长图中的一副图片给用户:
E2、用户拖动长图图片,选择出其中的一副图片,提交;
E3、跟据用户选择的图片向服务端发送该图片的编号;
(4)服务端验证:
服务端接收客户端返回的编号,并将编号与预存基准图片编号T对比,如果一样,则通过验证,否则验证失败,重复步骤(2)。
2.根据权利要求1所述的图片验证码生成的方法,其特征在于:步骤A中所述的随机字符是通过线性同余法生成的。
3.根据权利要求1所述的图片验证码生成的方法,其特征在于:所述的E2步骤,在显示给用户的长图图片的下方添加有滑块组件,使用户通过左右移动滑块来左右拖动长图图片。
4.根据权利要求1所述的图片验证码生成的方法,其特征在于:步骤A中所述的A1步骤,首先将该基准图片压缩成50*50px至500*500px后再将该图片保存。
5.根据权利要求1所述的图片验证码生成的方法,其特征在于:步骤D中的所述的步骤D1是将N-1张拷贝图片和基准图片按编号从小到大的顺序排列拼接生成一张首尾相接的长图图片。
6.根据权利要求2所述的图片验证码生成的方法,其特征在于:所述的N=30,所述的X=8,所述的Y=8。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510019296.6A CN104618350B (zh) | 2015-01-15 | 2015-01-15 | 一种图片验证码的生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510019296.6A CN104618350B (zh) | 2015-01-15 | 2015-01-15 | 一种图片验证码的生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104618350A CN104618350A (zh) | 2015-05-13 |
CN104618350B true CN104618350B (zh) | 2018-03-16 |
Family
ID=53152625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510019296.6A Active CN104618350B (zh) | 2015-01-15 | 2015-01-15 | 一种图片验证码的生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104618350B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106023284A (zh) * | 2016-05-09 | 2016-10-12 | 深圳市博悦生活用品有限公司 | 一种拼图学习方法及拼图学习系统 |
CN106096963A (zh) * | 2016-06-29 | 2016-11-09 | 深圳信息职业技术学院 | 一种验证码的生成方法和装置以及验证方法和装置 |
CN106341403B (zh) * | 2016-08-30 | 2018-05-11 | 竞技世界(北京)网络技术有限公司 | 一种验证码防刷的方法 |
CN108229127B (zh) * | 2016-12-21 | 2021-08-17 | 英业达科技有限公司 | 预先产生验证数据以区分客户端的系统及其方法 |
CN108989269B (zh) * | 2017-06-02 | 2021-10-15 | 阿里巴巴集团控股有限公司 | 获取验证码的方法、装置和系统 |
CN108390862B (zh) * | 2018-01-29 | 2021-04-27 | 丹露成都网络技术有限公司 | 一种基于图片数据加密索引的图形验证方法 |
CN108921784B (zh) * | 2018-06-13 | 2023-08-29 | 杭州吉吉知识产权运营有限公司 | 一种基于移动终端的图片压缩方法及系统 |
CN109598270B (zh) * | 2018-12-04 | 2020-05-05 | 龙马智芯(珠海横琴)科技有限公司 | 扭曲文字的识别方法及装置、存储介质及处理器 |
CN109858230A (zh) * | 2019-01-08 | 2019-06-07 | 平安科技(深圳)有限公司 | 滑块验证方法、装置、计算机设备及存储介质 |
CN110730162B (zh) * | 2019-09-16 | 2022-03-18 | 北京齐尔布莱特科技有限公司 | 一种页面的验证方法、移动终端、可读存储介质 |
CN111563941B (zh) * | 2020-05-08 | 2023-12-22 | 拉扎斯网络科技(上海)有限公司 | 一种图片验证码生成方法、验证方法、装置及相关设备 |
CN114281224A (zh) * | 2021-12-15 | 2022-04-05 | 中国银联股份有限公司 | 一种基于滑块的校验方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1988442A (zh) * | 2005-12-23 | 2007-06-27 | 上海盛大网络发展有限公司 | 图片验证码的实现方法 |
CN101923702A (zh) * | 2010-08-25 | 2010-12-22 | 郝红卫 | 一种图片验证码的生成方法 |
CN101976430A (zh) * | 2010-10-29 | 2011-02-16 | 赵俊平 | 一种图片验证码生成方法及其系统 |
CN102801735A (zh) * | 2012-08-28 | 2012-11-28 | 吴渊 | 基于行为方式的网络验证方法及系统 |
-
2015
- 2015-01-15 CN CN201510019296.6A patent/CN104618350B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1988442A (zh) * | 2005-12-23 | 2007-06-27 | 上海盛大网络发展有限公司 | 图片验证码的实现方法 |
CN101923702A (zh) * | 2010-08-25 | 2010-12-22 | 郝红卫 | 一种图片验证码的生成方法 |
CN101976430A (zh) * | 2010-10-29 | 2011-02-16 | 赵俊平 | 一种图片验证码生成方法及其系统 |
CN102801735A (zh) * | 2012-08-28 | 2012-11-28 | 吴渊 | 基于行为方式的网络验证方法及系统 |
Non-Patent Citations (3)
Title |
---|
"Handwritten CAPTCHA: Using the difference in the abilities of humans and machines in reading handwritten words";A.Rusu等;《IEEE》;20041029;第226-231页 * |
"基于FusionCharts的图形验证码的研究与实现";李建迎等;《计算机应用与软件》;20140815;第31卷(第8期);第327-329页 * |
"基于多图层的图形验证码生成技术研究";胡征兵等;《计算机与现代化》;20110215(第186期);第1-4页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104618350A (zh) | 2015-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104618350B (zh) | 一种图片验证码的生成方法 | |
US10785241B2 (en) | URL attack detection method and apparatus, and electronic device | |
EP3271868B1 (en) | Method and apparatus for verifying images based on image verification codes | |
US20130019278A1 (en) | Captcha image authentication method and system | |
US20210295114A1 (en) | Method and apparatus for extracting structured data from image, and device | |
CN108021806B (zh) | 一种恶意安装包的识别方法和装置 | |
CN102006163A (zh) | 用户验证方法、装置及服务器 | |
CN108875404B (zh) | 基于机器学习的数据脱敏方法、装置及存储介质 | |
US10769270B2 (en) | Password protection question setting method and device | |
CN108366052A (zh) | 验证短信的处理方法及系统 | |
CN111062036A (zh) | 恶意软件识别模型构建、识别方法及介质和设备 | |
CN105989251A (zh) | 一种盗版安卓应用甄别方法及盗版安卓应用甄别系统 | |
CN108470126A (zh) | 数据处理方法、装置及存储介质 | |
CN111680291A (zh) | 一种对抗样本生成方法、装置、电子设备及存储介质 | |
CN106250755B (zh) | 用于生成验证码的方法及装置 | |
CN109284590A (zh) | 访问行为安全防护的方法、设备、存储介质及装置 | |
CN110263530B (zh) | 密码重置请求的鉴别方法与装置 | |
CN117093619A (zh) | 一种规则引擎处理方法、装置、电子设备及存储介质 | |
CN113158167B (zh) | 验证码实现方法及电子设备和计算机可读存储介质 | |
CN107844696B (zh) | 一种验证码干扰方法及服务器 | |
CN107453876A (zh) | 一种基于图片的验证码实现方法及装置 | |
TW202242685A (zh) | 基於攻擊型圖像風格轉換的驗證方法及系統 | |
CN109933969B (zh) | 验证码识别方法、装置、电子设备及可读存储介质 | |
Angre et al. | PiCAPTion: Picture CAPTCHAs for internet authentication | |
CN111460422B (zh) | 生成验证码的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |