发明内容
有鉴于此,本发明要解决的技术问题是,提供一种验证码的获取方法及装置,使得用户能够更加安全可靠的进行验证码的获取,进而增强了用户身份验证的可靠性和安全性。
为此,本发明实施例采用如下技术方案:
本发明提供一种验证码获取方法,包括:
向用户展现验证码矩阵;
获取用户的子区域选择指令,根据选择指令指示的验证码矩阵中的子区域,获取该子区域对应的验证码集合;
在预设的显示区域向用户显示所述验证码集合。
所述获取该子区域对应的验证码集合包括:
获取该子区域对应的验证数据;
对所述验证数据进行解密,得到该子区域对应的验证码集合。
所述在预设显示区域向用户显示所述验证码集合包括:
生成两随机数,分别为第一随机数和第二随机数;其中,第一随机数取值为[1,N1];第二随机数的取值为[1,N2];N2为大于1的整数;
将所述显示区域划分为N2个显示子区域;
在所述N2个显示子区域分别滚动显示任意随机数;确定滚动显示时间大于所述第一随机数时,在第二随机数对应的显示子区域持续显示所述验证码集合直至验证码集合的显示时间超过预设时间阈值。
所述在预设显示区域向用户显示所述验证码集合包括:
生成两随机数,分别为第三随机数和第四随机数;其中,第三随机数取值为[1,N3];第四随机数的取值为[1,N4];N4为大于1的整数;
将所述显示区域划分为N5个显示子区域;
在所述N5个显示子区域分别滚动显示任意随机数;确定滚动显示时间大于所述第三随机数时,从第四随机数对应的显示子区域开始在连续的n个显示子区域上持续显示所述验证码集合,直至验证码集合的显示时间超过预设时间阈值;
n为验证码集合中验证码的数量。
向用户展现验证码矩阵之前,进一步包括:
获取核心数据;所述核心数据包括所述验证码矩阵子区域以及子区域对应的验证数据;
判断所述核心数据完整且所述核心数据进行了膨胀处理。
所述获取核心数据之前进一步包括:
检测当前运行环境未被监听调试。
所述判断核心数据完整包括:
获取核心数据中的数据内容,根据所述数据内容计算得到一校验码;
将计算得到的校验码与核心数据中预设的校验码比较,相同时,确定所述核心数据完整。
本发明还提供一种验证码获取装置,包括:
展现单元,用于向用户展现验证码矩阵;
第一获取单元,用于获取用户的子区域选择指令,根据选择指令指示的验证码矩阵中的子区域,获取该子区域对应的验证码集合;
显示单元,用于在预设的显示区域向用户显示所述验证码集合。
第一获取单元包括:
获取子单元,用于获取用户的子区域选择指令,根据选择指令指示的验证码矩阵中的子区域,获取该子区域对应的验证数据;
解密子单元,用于对所述验证数据进行解密,得到该子区域对应的验证码集合。
显示单元包括:
第一随机数生成子单元,用于生成两随机数,分别为第一随机数和第二随机数;其中,第一随机数取值为[1,N1];第二随机数的取值为[1,N2];N2为大于1的整数;
第一划分子单元,用于将所述显示区域划分为N2个显示子区域;
第一显示子单元,用于在所述N2个显示子区域分别滚动显示任意随机数;确定滚动显示时间与大于所述第一随机数时,在第二随机数对应的显示子区域持续显示所述验证码集合直至验证码集合的显示时间超过预设时间阈值。
显示单元包括:
第二随机数生成单元,用于生成两随机数,分别为第三随机数和第四随机数;其中,第三随机数取值为[1,N3];第四随机数的取值为[1,N4];N4为大于1的整数;
第二划分子单元,用于将所述显示区域划分为N5个显示子区域;N5大于N4;
第二显示子单元,用于在所述N5个显示子区域分别滚动显示任意随机数;确定滚动显示时间大于所述第三随机数时,从第四随机数对应的显示子区域开始在连续的n个显示子区域上持续显示所述验证码集合,直至验证码集合的显示时间超过预设时间阈值;n为验证码集合中验证码的数量。
还包括:第二获取单元,用于获取系统数据,所述系统数据包括执行代码、界面数据以及核心数据;所述核心数据包括所述验证码矩阵子区域以及子区域对应的验证数据;
判断单元,用于判断所述核心数据完整且所述核心数据进行了膨胀处理。
还包括:检测单元,用于检测当前运行环境未被监听调试。
判断单元包括:
计算子单元,用于获取核心数据中的数据内容,根据所述数据内容计算得到一校验码;
比较子单元,用于将计算得到的校验码与核心数据中预设的校验码比较,相同时,判断所述核心数据完整;
判断子单元,用于判断所述核心数据进行了膨胀处理。
对于上述技术方案的技术效果分析如下:
为用户展现验证码矩阵,根据用户的选择指令获取子区域对应的验证码集合向用户显示,使得验证码的获取更为复杂,不容易为人破解或盗取,从而增强了验证码获取的安全性,进而增强了用户身份验证的可靠性和安全性。
具体实施方式
现有技术中一般都是提供一个图片格式的验证码,提供用户下载,并建议用户去打印以便保证验证码的安全性。例如在网络游戏等的身份验证中,一般为游戏用户(玩家)提供JPG格式的验证码图片,并要求用户下载并建议用户进行打印保存,但是目前大多数用户的安全意识不高,或者因为条件不允许无法打印,或者为了方便直接使用JPG图片,或者忘记删除JPG文件,从而导致运营商提供的JPG格式的验证码图片保存在用户电脑上,而这种JPG格式的验证码图片又符合某种规范,比如命名规范、图片大小范围等,已知多种盗号功能会扫描用户硬盘、最近打开文件记录等区域,查找到该JPG格式的验证码图片,并通过邮件、http页面等形式,盗取用户的验证码,进而例如在网络游戏中,盗取用户帐号和虚拟财产,让用户的利益收到损失。
因为上面的缺陷导致,用户的利益收到损害,例如在网络游戏中导致大量游戏用户流逝(根据调查,有接近50%的用户因为帐号被盗,导致离开游戏),增加运营商的运营成本(比如需要查询用户的历史记录给用户补偿,安抚因为等待时间过长的用户闹事等),为了能低成本和降低盗号的风险,给用户和运营商利益带来保障,促进网络例如网络游戏的和谐、健康、稳定的发展运作,本发明提供一种新的验证码的获取方法和装置,使得用户能够更加安全可靠的进行验证码的获取,进而增强用户身份验证的可靠性和安全性。
以下,结合附图详细说明本发明实施例验证码获取方法及装置的实现。
图1为本发明实施例验证码获取方法流程示意图,如图1所示,该方法包括:
步骤101:向用户展现验证码矩阵;
步骤102:获取用户的子区域选择指令,根据选择指令指示的验证码矩阵中的子区域,获取该子区域对应的验证码集合;
其中,本步骤中的所述获取该子区域对应的验证码集合可以包括:
获取该子区域对应的验证数据;
对所述验证数据进行解密,得到该子区域对应的验证码集合。
步骤103:在预设的显示区域向用户显示所述验证码集合。
图1所示的本发明实施例验证码获取方法中,为用户展现验证码矩阵,根据用户的选择指令获取子区域对应的验证码集合向用户显示,使得验证码的获取更为复杂,而且,所保存的是验证码集合加密后得到的验证数据,而不是直接保存子区域对应的验证码集合,从而使得本发明中的验证码不容易为人破解或盗取,从而增强了验证码获取的安全性,进而增强了用户身份验证的可靠性和安全性。
在图1的基础上,通过图2对本发明实施例验证码获取方法进行更为详细的说明。如图2所示,该验证码获取方法包括:
步骤201:确定进行验证码获取时,检测当前运行环境是否被监听调试,如果否,执行步骤202;否则,当前处理流程结束。
其中,本发明实施例验证码获取方法可以通过对应的验证码获取装置实现,此时,本步骤中所述确定进行验证码获取可以为:验证码获取装置被启动;
而所述运行环境也即为验证码获取装置所处的运行环境。例如,Windows系统、Linux系统等。甚至所述运行环境还可以包括正在运行的进程、内存的状态、操作系统的设置等等。
这里,可以使用与运行环境对应的检测方法完成对运行环境是否被监听调试的检测,例如:通过进程和窗口的反注入等检测方法可以实现所述检测。
通过本步骤的执行,可以首先确定验证码获取过程是否被监听调试,从而保证验证码获取过程的安全可靠。
步骤202:获取核心数据,判断所述核心数据是否完整,如果是,执行步骤203;否则,当前处理流程结束。
核心数据是指:验证码矩阵的各个子区域以及各个子区域所对应的验证数据。
另外,在实际应用中,所述系统数据还可以包括界面数据,例如为了实现本发明验证码获取方法的装置界面更加美观而设置的装置界面贴图、界面边框等,这里不赘述。
所述验证码矩阵是指:将一预设矩形区域划分为预设行数m和列数n后得到的矩阵。所述矩形区域通过划分得到mn个子区域;为每一子区域预先设定对应的验证码集合,并且进一步对验证码集合进行加密处理,得到对应的验证数据,也即:所述验证数据是指:验证码集合进行加密处理后得到的数据。为了对不同的子区域进行区分,可以通过子区域所在的行号和列号进行每一子区域的标识,得到子区域ID,如图3所示的验证码矩阵,行列数分别为7,在这里使用A~G和1~7分别标识矩阵的行和列;从而验证码矩阵中的每个子区域,均对应一通过行号和列号标识的唯一标识,如图3中所示的A1~A7、B1~B7等等。
其中,所述验证码可以为字母和/或数字和/或符号等,这里并不限制。
其中,可以对所述验证码使用RSA1024、AES128、随机异或等算法进行所述加密,得到验证数据,进而后续步骤206中可以通过对应的解密算法对所述验证数据进行解密,得到验证码集合。
所述核心数据的数据结构可以为:校验码、数据长度和数据内容。所述判断核心数据是否完整可以包括:获取数据长度,根据数据长度获取所述数据内容,采用数据完整性判断算法例如类CRC算法根据所述数据内容计算出一个校验码,将计算出的校验码与核心数据中预设的校验码进行比较,相同时,判断所述核心数据完整;否则,判断所述核心数据不完整。
本步骤中判断核心数据的完整性同样是进一步保证验证码获取过程的安全性。
步骤203:判断是否需要进行核心数据的膨胀处理,如果是,执行步骤204;否则,执行步骤205。
其中,可以在核心数据中设置一膨胀处理标识位,通过该标识位表征核心数据是否进行了膨胀处理,则本步骤中直接通过读取核心数据中对应的标识位即可实现所述判断。
步骤204:获取膨胀密钥,对所述核心数据进行膨胀处理;
所述膨胀处理简单来说是数据的放大填充,对于核心数据A以及所述膨胀密钥r,膨胀密钥r和核心数据A经过某算法f得到d=f(A,r),因为膨胀密钥的添加,导致数据被膨胀填充为d。
如果需要对数据进行恢复,得到系统数据A,那么需要首先读取到r和d,然后A=f-1(r,d)。
其中,所述膨胀密钥可以自主设定,或者,也可以在进行膨胀处理时自动生成,这里并不限制。但是,一旦进行了膨胀处理,则需要将设定或生成的膨胀密钥进行存储,以便后续进行数据恢复。该膨胀密钥可以存储于所述核心数据中,或者,也可以设置其他的存储位置,这里并不限制。
如果由用户自主设定膨胀密钥,为了保证用户输入膨胀密钥的可靠性,所述获取膨胀密钥可以为:为用户提供虚拟键盘,获取用户通过鼠标或键盘等指示的虚拟键盘位置,根据虚拟键盘位置确定该位置对应的字符,从而得到用户输入的膨胀密钥。
一般的,所述虚拟键盘是指在终端图形界面上显示出的、带字符的图形,用户通过鼠标、键盘等输入设备指示虚拟键盘位置,该虚拟键盘位置对应的字符即为用户输入的字符,用户一次或多次指示虚拟键盘位置,即可以指示出所希望设定的膨胀密钥。
例如,在图3a~3c中即提供了一种使用虚拟键盘进行膨胀密钥设置的方法,其中,在图3a中为用户提供了“点击进行密码设置”“点击进行密码确认”两个按钮,其中,当用户点击“点击进行密码设置”按钮时,在对应区域弹出虚拟键盘,如图3b所示,由用户进行所需设置密码中对应字符的选择输入;之后,再由用户点击“点击进行密码确认”按钮,在如图3c所示的位置再次出现虚拟键盘,由用户进行密码的再次确认,从而实现了使用虚拟键盘进行膨胀密钥的输入。其中,带斜线的按钮表示在实际应用中可以在当时的状态下设置这些按钮不可用,以便保证用户输入的准确性。
步骤205:向用户展现验证码矩阵;获取用户的子区域选择指令,根据选择指令指示的验证码矩阵中的子区域,从所述核心数据中获取该子区域对应的验证数据。
其中,在向用户展现验证码矩阵时,可以使用不同的展现方法,但是不能将验证码矩阵中各个子区域对应的验证数据或验证码在对应的子区域上显示出来。例如,所述验证码矩阵可以使用如图2a所示的展现方法进行展现。其中,对于所述验证码矩阵展现的界面还可以通过添加颜色、图案、图片等方式进行个性化和美化处理,这里并不限定。
这里,当验证码矩阵向用户展现后,用户可以通过鼠标点击相应的子区域、键盘输入相应的子区域标识等方式实现对于子区域的选择。所述获取用户的选择指令,也即为识别用户通过鼠标或键盘选定的子区域的过程。
另外,由于之前已经进行了核心数据的膨胀处理,本步骤中的所述从核心数据中获取该子区域对应的验证数据可以包括:
对所述核心数据进行恢复;
从恢复后的核心数据中获取所述子区域对应的验证数据。
步骤206:对获取到的验证数据进行解密,得到所述子位置对应的验证码集合。
步骤207:在预设显示区域向用户显示所述验证码集合。
其中,本步骤的实现可以为:
生成两随机数,分别为第一随机数和第二随机数;其中,第一随机数取值为[1,N1];第二随机数的取值为[1,N2];N2为大于1的整数;
将所述显示区域划分为N2个显示子区域;
在所述N2个显示子区域分别滚动显示任意随机数;确定滚动显示时间与大于所述第一随机数时,在第二随机数对应的显示子区域持续显示所述验证码集合直至验证码集合的显示时间超过预设时间阈值。
例如,设定第一随机数取值为[2,5];第二随机数的取值为[1,10];
将所述显示区域划分为10个显示子区域;
在所述10个显示子区域分别滚动显示任意随机数;确定滚动显示时间大于所述第一随机数时,在第二随机数对应的显示子区域持续显示所述验证码集合直至验证码集合的显示时间超过预设时间阈值,例如设定为(7-第一随机数)s。
或者,
在实际应用中,也可以每个显示子区域只显示一个验证码,从而当验证码集合存在多个验证码时,从所述第二随机数对应显示子区域开始在连续的多个验证码上显示所述验证码集合。此时,本步骤的实现可以包括:
生成两随机数,分别为第三随机数和第四随机数;其中,第三随机数取值为[1,N3];第四随机数的取值为[1,N4];N4为大于1的整数;
将所述显示区域划分为N5个显示子区域;
在所述N5个显示子区域分别滚动显示任意随机数;确定滚动显示时间大于所述第三随机数时,从第四随机数对应的显示子区域开始在连续的n个显示子区域上持续显示所述验证码集合,直至验证码集合的显示时间超过预设时间阈值;n为验证码集合中验证码的数量。N5>n。
例如,验证码集合中包括3个验证码,N2为10,第二随机数为3,则从子区域3~5中,每个子区域显示一个验证码,从而也可以实现将验证码集合显示给用户的目的。
例如,在图2b中,则在验证码矩阵的上部设置了显示区域。
其中,在进行验证码的显示时,可以先将步骤206中得到的验证码转换为验证码图片,从而进一步降低其他人截取到验证码进行破译的风险性,保证验证码获取过程的安全性。
其中,用户可以多次进行选择指令的输入,从而获得验证码矩阵中多个子区域对应的验证码,此时,步骤205~步骤207将循环执行多次,这里不再赘述。
图2所示的验证码获取方法,通过检测运行环境是否被监听调试、核心数据是否完整、对系统数据进行膨胀以及特殊的验证码显示方法等进一步增强了用户验证码获取过程的安全性,进而保证了用户进行身份验证的安全可靠。
与验证码获取方法相对应的,本发明实施例还提供一种验证码获取装置,如图4所示,该装置包括:
展现单元410,用于向用户展现验证码矩阵;
第一获取单元420,用于获取用户的子区域选择指令,根据选择指令指示的验证码矩阵中的子区域,获取该子区域对应的验证码集合;
显示单元430,用于在预设的显示区域向用户显示所述验证码集合。
其中,第一获取单元420的实现可以包括:
获取子单元,用于获取用户的子区域选择指令,根据选择指令指示的验证码矩阵中的子区域,获取该子区域对应的验证数据;
解密子单元,用于对所述验证数据进行解密,得到该子区域对应的验证码集合。
其中,如图5所示,显示单元430可以包括:
第一随机数生成子单元510,用于生成两随机数,分别为第一随机数和第二随机数;其中,第一随机数取值为[1,N1];第二随机数的取值为[1,N2];N2为大于1的整数;
第一划分子单元520,用于将所述显示区域划分为N2个显示子区域;
第一显示子单元530,用于在所述N2个显示子区域分别滚动显示任意随机数;确定滚动显示时间与大于所述第一随机数时,在第二随机数对应的显示子区域持续显示所述验证码集合直至验证码集合的显示时间超过预设时间阈值。
或者,所述显示单元430可以包括:
第二随机数生成单元,用于生成两随机数,分别为第三随机数和第四随机数;其中,第三随机数取值为[1,N3];第四随机数的取值为[1,N4];N4为大于1的整数;
第二划分子单元,用于将所述显示区域划分为N5个显示子区域;N5大于N4;
第二显示子单元,用于在所述N5个显示子区域分别滚动显示任意随机数;确定滚动显示时间大于所述第三随机数时,从第四随机数对应的显示子区域开始在连续的n个显示子区域上持续显示所述验证码集合,直至验证码集合的显示时间超过预设时间阈值;n为验证码集合中验证码的数量。
优选地,如图4所示,该装置还可以进一步包括:
第二获取单元440,用于获取系统数据,所述系统数据包括执行代码、界面数据以及核心数据;所述核心数据包括所述验证码矩阵子区域以及子区域对应的验证数据;
判断单元450,用于判断所述核心数据完整且所述核心数据进行了膨胀处理。
优选地,该装置还可以进一步包括:
检测单元460,用于检测当前运行环境未被监听调试。
另外,所述判断单元450可以包括:
计算子单元,用于获取核心数据中的数据内容,根据所述数据内容计算得到一校验码;
比较子单元,用于将计算得到的校验码与核心数据中预设的校验码比较,相同时,判断所述核心数据完整;
判断子单元,用于判断所述核心数据进行了膨胀处理。
图4~图5所示的本发明实施例验证码获取装置,展现单元为用户展现验证码矩阵,第一获取单元根据用户的选择指令获取子区域对应的验证数据,之后解密单元对验证数据进行解密后才能得到验证码集合,由显示单元向用户显示,使得验证码的获取更为复杂,不容易为人破解或盗取,从而增强了验证码获取的安全性,进而增强了用户身份验证的可靠性和安全性。
本发明实施例的所述验证码获取方法及装置不仅可以适用于网络游戏中,对于其他需要进行身份验证的系统同样适用。
图6中给出了一种以本发明验证码获取方法及装置实现的密保卡界面。其中,序列号用于唯一标识一种密保卡。而该界面还进一步包括:验证码的显示区域以及验证码矩阵的显示。
本领域普通技术人员可以理解,实现上述实施例验证码获取方法的过程可以通过程序指令相关的硬件来完成,所述的程序可以存储于可读取存储介质中,该程序在执行时执行上述方法中的对应步骤。所述的存储介质可以如:ROM/RAM、磁碟、光盘等。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。