本发明涉及验证码处理技术领域,具体来讲是一种利用密码盘实现验证码验证的方法及系统。
背景技术:
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。通常情况下,验证码使用一些线条和一些不规则的字符组成,用户必须读取这些字符,然后输入这些字符才能成功验证。因为人可以很容易读出图片中的字符,但如果是一段客户端攻击程序(即机器人程序),则通过一般手段是很难识别所述验证码的。因此,验证码的作用是可以防止恶意破解密码、刷票、论坛灌水或进行非正常的不断登陆尝试等。
目前,很多网站或应用都会有自己的验证码验证系统。但是,实际使用中,现有的很多验证系统还是可能会遭到用户或者一些人员的破解,安全性较低,进而使得网站或应用中某些功能还是可能会被机器程序来利用完成,这样对于该应用的其他用户是不公平的。
因此,如何有效避免验证码被恶意破解,提高验证码的验证作用,是本领域技术人员亟待解决的问题。
技术实现要素:
本发明的目的是为了克服上述背景技术的不足,提供一种利用密码盘实现验证码验证的方法及系统,能有效避免验证码被恶意破解,增强验证码的验证作用,安全性高。
为达到以上目的,本发明采取的技术方案是:提供一种利用密码盘实现验证码验证的方法,该方法包括以下步骤:A、用户端向服务器端发出验证码信息的请求;B、服务器端收到用户端发来的验证码信息的请求后,随机选定真实验证码并生成相应验证码信息;根据真实验证码,经过随机选定的一种四则运算得到提示信息;将验证码信息和提示信息发送至用户端;C、用户端收到服务器端发来的信息后,根据验证码信息绘制包含有真实验证码的圆形密码盘,并展示提示信息;D、用户根据提示信息,通过旋转密码盘输入相应的数据;用户端记录下用户输入的数据并上传至服务器端;E、服务器端对用户端上传的数据进行验证,并返回验证结果至用户端;F、用户端根据服务器端返回的验证结果进行相应处理,并向用户进行反馈。
本发明还提供一种利用密码盘实现验证码验证的系统,该系统包括用户端和服务器端;用户端包括请求发送单元、密码盘绘制单元、数据记录单元、验证反馈单元;服务器端包括验证信息生成单元、验证处理单元;
所述请求发送单元用于:向服务器端发出验证码信息的请求;所述验证信息生成单元用于:收到用户端发来的验证码信息的请求后,随机选定真实验证码并生成相应验证码信息;根据真实验证码,经过随机选定的一种四则运算得到提示信息;将验证码信息和提示信息发送至用户端;所述密码盘绘制单元用于:收到服务器端发来的信息后,根据验证码信息绘制包含有真实验证码的圆形密码盘,并展示提示信息;所述数据记录单元用于:记录下用户通过旋转密码盘输入的数据,并上传至服务器端;所述验证处理单元用于:对用户端上传的数据进行验证,并返回验证结果至用户端;所述验证反馈单元用于:根据服务器端返回的验证结果进行相应处理,并向用户进行反馈。
本发明的有益效果在于:
1、传统的验证码验证技术中,验证码都是一个已经生成好的数据,而且是进入有限的数据库随中机取得的一条,如果有人想要破解,总能得到所有数据库的数据。而本发明中,所有的真实验证码都是随机生成的,且对应的提示信息也是通过随机选定的四则运算公式得到的,没有任何可预见性及破解性,因此,本发明可以从数量上及随机性上保证验证码不会被破解,增强了验证码的验证作用,安全性高。
2、本发明中,生成验证码信息的过程与验证处理的过程都是在服务器端做的,因此,用户端没有任何可以进行破解或者绕过验证的方式,从而有效保证了验证功能可以在需要使用的地方被使用,而不会被用户通过其他方式绕过。
3、本发明中,服务器端传输给用户端的信息中是不直接包含真实验证码的,而是与真实验证码对应的md5信息,因此,验证信息只能在服务器端验证。并且,服务器在一个验证码验证无论正确与否的情况下,该条数据都会立即删除,即使需要再次验证,也只会重新生成数据重新绘制密码盘进行验证,如果正确则返回正确的验证信息,如果错误则返回错误信息。由于同一验证信息只能被验证一次,无法重试,因此从根源上保证验证信息无法被破解。
4、本发明给用户提供了一种全新输入验证码的方式,不用在打开键盘,输入字符,而是通过简单的加减乘除四则运算来得到结果,同时通过转动密码盘来选择结果,方便的同时也避免了验证码被用户恶意绕过的危险。
5、本发明中,由于每次生成的数字个数不一样,填入密码盘的位置不一样,同时,由于数字个数不同,使得每次密码盘分片所占的圆心角角度也不一样。因此,只能人工来操作才可以正确使用,从而让输入功能避免机器输入的可能性,进一步增强验证码的验证作用。
附图说明
图1为本发明实施例中利用密码盘实现验证码验证的方法的流程图;
图2为本发明实施例中用户端所绘制的圆形密码盘的示意图;
图3为本发明实施例中利用密码盘实现验证码验证的系统的结构框图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
参见图1所示,本发明实施例提供一种利用密码盘实现验证码验证的方法,包括以下步骤:
步骤S1:用户在执行某项功能的时候如果需要用到验证码功能,会通过用户端向服务器端发出验证码信息的请求(即请求服务器端发送验证码信息)。
步骤S2:服务器端收到用户端发来的验证码信息的请求后,会随机选定真实验证码,并根据真实验证码生成对应的验证码信息。
可以理解的是,为了提高验证码的安全性,在生成验证码信息时,会对真实验证码进行md5编码,即生成一个与真实验证码对应的md5信息,且在后续的验证码信息的传输过程中,真实验证码也只会以经过md5编码后的md5信息存在,有效地提高了安全性。在此基础上,步骤S2具体包括以下操作:
步骤S201:服务器端收到用户端发来的验证码信息的请求后,随机生成若干个数字。
可以理解的是,服务器端随机生成的数字的最大个数不超过20个,因为数字多了用户手机上生成的密码盘中,每个数字所占的界面空间就较小,会影响用户体验。因此,本方案中规定随机生成的数字的个数不超过20个。并且,每个数字的值都在300以内,因为如果数值比300大同样会影响用户体验。
步骤S202:从生成的若干个数字中随机挑选一个数字作为真实验证码,并保存至本地的验证码临时库中。
步骤S203:生成一个与真实验证码对应的md5信息,并临时保存至本地。
步骤S204:将随机生成的若干个数字与所述md5信息组合,生成验证码信息。
步骤S3:根据真实验证码,经过随机选定的一种四则运算(即加减乘除中的一种),得到提示信息。
可以理解的是,由于四则运算包括加减乘除四种运算方式,因此,实际操作中,步骤S3具体包括以下操作:
若随机选定的四则运算为加法运算,则先随机获取一个比真实验证码小的数字,记为X1;然后使用真实验证码去减X1,得到的数据记为X2;最后,生成内容为“请选出X1和X2相加得到的数字”的提示信息;
若随机选定的四则运算为减法运算,则先随机获取一个比真实验证码大的数字,记为X1;然后使用X1去减真实验证码,得到的数据记为X2;最后,生成内容为“请选出X1和X2相减得到的数字”的提示信息;
若随机选定的四则运算为乘法运算,则先判断验证码是否为质数,若是,则随机转换至其他四则运算来生成提示信息;若不是,则先将真实验证码除以2,看是否有余数,如果有余数则重新将真实验证码除以3,再判断是否余数,如果还有余数则将真实验证码依次除下去,直至没有余数为止;然后,将当前除数记为X1,将商记为X2;最后,生成内容为“请选出X1和X2相乘得到的数字”的提示信息;
若随机选定的四则运算为除法运算,则使用真实验证码乘以一个随机获取的数据,将随机获取的数据记为X1,将计算得到的数据记为X2;生成内容为“请选出X1和X2相除得到的数字”的提示信息。
步骤S4:将验证码信息和提示信息发送至用户端。本实施例中,服务器端会将验证码信息和提示信息组合成一个JSON(JavaScript Object Notation,一种轻量级的数据交换格式)字符串发送至客户端。其格式可如下:
其中,code为生成的md5信息,msg为生成的提示信息,num为服务器端随机生成的若干个数字。
步骤S5:用户端收到服务器端发来的信息后,根据验证码信息绘制包含有真实验证码的圆形密码盘,并展示提示信息。
实际操作时,步骤S5具体包括以下操作:
步骤S501:用户端收到服务器端发来的信息后,获取验证码信息中随机生成的若干个数字的个数。
步骤S502:用360°除以随机生成的若干个数字的个数,得到圆形密码盘中每块扇形分片的圆心角度数。可以理解的是,实际操作中,若所计算出来的圆心角度数如果有余数,则使用四舍五入取得整数,最后一块扇形分片可能不会均分,但是只存在1度的误差,因此用户难以从视觉上察觉。
步骤S503:如图2所示,根据得到的各块扇形分片的圆心角度数绘制圆形密码盘,将验证码信息中随机生成的若干个数字一一填入到扇形分片中;并展示验证码信息中的提示信息。
步骤S6:用户根据提示信息,通过旋转密码盘输入相应的数据;用户端记录下用户输入的数据并上传至服务器端。
可以理解的是,实际操作时,用户可以通过旋转密码盘来输入根据提示信息得到的相应数据,输入数据时用户只需将对应的数据旋转到指定位置(如图2中箭头处)即可。当用户松开时,用户端记录下用户输入的数据,并会将记录的数据与验证码信息中的md5信息一并上传至服务器端。
步骤S7:服务器端对用户端上传的数据进行验证,并返回验证结果。实际操作时,步骤S7具体包括以下操作:
步骤S701:服务器端通过用户端上传的md5信息查询本地是否存在与该md5信息对应的真实验证码,若不存在,则重新生成一组新的验证码信息发送至用户端,转入步骤S704;若存在,转入步骤S702;
步骤S702:判断用户端上传的数据是否与通过md5信息查询到的真实验证码一致,若是,转入步骤S703;若否,转入步骤S704;
步骤S703:向用户端返回验证成功的状态;
步骤S704:向用户端返回验证失败的状态。
步骤S8:用户端根据服务器端返回的验证结果进行相应处理,并向用户进行反馈。实际操作时,用户端进行的相应处理可按照具体应用的需求具体而定。而本实施例中,用户端会先判断服务器端返回的验证状态,若为验证成功状态,则直接向用户反馈验证通过信息;若为验证失败状态,则会判断服务器端是否重新发来有新的验证码信息,若是,则返回步骤S5,重新绘制圆形密码盘并重新让用户进行输入;若否,则证明用户验证错误,向用户反馈验证未通过信息。
参见图3所示,本发明还提供了一种利用密码盘实现验证码验证的系统,包括用户端和服务器端;其中,用户端包括请求发送单元、密码盘绘制单元、数据记录单元、验证反馈单元;服务器端包括验证信息生成单元、验证处理单元。
所述请求发送单元用于:向服务器端发出验证码信息的请求。
所述验证信息生成单元用于:收到用户端发来的验证码信息的请求后,随机选定真实验证码并生成相应验证码信息;根据真实验证码,经过随机选定的一种四则运算得到提示信息;将验证码信息和提示信息发送至用户端。
进一步地,所述验证信息生成单元生成验证码信息的具体流程为:收到用户端发来的验证码信息的请求后,随机生成若干个数字;从生成的若干个数字中随机挑选一个数字作为真实验证码,并保存至本地的验证码临时库中;生成一个与真实验证码对应的md5信息,并临时保存至本地;将随机生成的若干个数字与所述md5信息组合,生成验证码信息。
更进一步地,所述验证信息生成单元生成提示信息的具体流程为:若随机选定的四则运算为加法运算,则先随机获取一个比真实验证码小的数字,记为X1;然后使用真实验证码去减X1,得到的数据记为X2;最后,生成内容为“请选出X1和X2相加得到的数字”的提示信息。若随机选定的四则运算为减法运算,则先随机获取一个比真实验证码大的数字,记为X1;然后使用X1去减真实验证码,得到的数据记为X2;最后,生成内容为“请选出X1和X2相减得到的数字”的提示信息。若随机选定的四则运算为乘法运算,则先判断验证码是否为质数,若是,则随机转换至其他四则运算来生成提示信息;若不是,则先将真实验证码除以2,看是否有余数,如果有余数则重新将真实验证码除以3,再判断是否余数,如果还有余数则将真实验证码依次除下去,直至没有余数为止;然后,将当前除数记为X1,将商记为X2;最后,生成内容为“请选出X1和X2相乘得到的数字”的提示信息。若随机选定的四则运算为除法运算,则使用真实验证码乘以一个随机获取的数据,将随机获取的数据记为X1,将计算得到的数据记为X2;生成内容为“请选出X1和X2相除得到的数字”的提示信息。
所述密码盘绘制单元用于:收到服务器端发来的信息后,根据验证码信息绘制包含有真实验证码的圆形密码盘,并展示提示信息。其具体流程为:收到服务器端发来的信息后,获取验证码信息中随机生成的若干个数字的个数;用360°除以随机生成的若干个数字的个数,得到圆形密码盘中每块扇形分片的圆心角度数;根据得到的各块扇形分片的圆心角度数绘制圆形密码盘,将验证码信息中随机生成的若干个数字一一填入到扇形分片中;并展示验证码信息中的提示信息。
所述数据记录单元用于:记录下用户通过旋转密码盘输入的数据,并上传至服务器端。
所述验证处理单元用于:对用户端上传的数据进行验证,并返回验证结果至用户端。其具体流程为:通过用户端上传的md5信息查询本地是否存在与该md5信息对应的真实验证码,若不存在,则重新生成一组新的验证码信息发送至用户端,并向用户端返回验证失败的状态;若存在,则判断用户端上传的数据是否与通过md5信息查询到的真实验证码一致,若是,向用户端返回验证成功的状态;若否,向用户端返回验证失败的状态。
所述验证反馈单元用于:根据服务器端返回的验证结果进行相应处理,并向用户进行反馈。
需要说明的是:上述实施例提供的验证码验证系统在进行具体操作时,仅以上述各功能单元的划分进行举例说明,实际应用中,可根据需要将上述功能分配由不同的功能单元完成,即将系统的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。