动态码生成方法、装置、计算机设备和存储介质与流程

文档序号:18216159发布日期:2019-07-19 22:39阅读:415来源:国知局
动态码生成方法、装置、计算机设备和存储介质与流程

本发明涉及到数据处理的技术领域,特别是涉及到一种动态码生成方法、装置、计算机设备和存储介质。



背景技术:

动态密码是根据专门的算法生成一个不可预测的随机数字组合,也是一种安全便捷的帐号防盗技术,可以有效保护交易和登录的认证安全,目前被广泛运用在网银、网游、电信运营商、电子政务、企业等应用领域。

传统的动态码位数、有效时间基本固定,产生方式单一,若需要调整动态码的位数和有效时间,则需要人工进行干预,而各行业通常会为了节省资源,在生成动态码时采用动态码位数与有效时间固定的生产方式,该种动态码容易被破译,安全性较低,难以得到保障。



技术实现要素:

本发明的主要目的为提供一种动态码生成方法、装置、计算机设备和存储介质,旨在解决现有动态码安全性较低的技术问题。

基于上述发明目的,本发明提出一种动态码生成方法,包括:

统计目标用户在预设时间内通过动态码认证成功的第一占比,以及计算所有用户在所述预设时间内通过动态码认证成功的第二占比;

计算所述第一占比与第二占比的差值;

判断所述差值是否处于需要变更动态码的数值范围内;

若是,则获取对应所述数据范围的更改规则,并将目标用户令牌中的第一动态码位数和第一有效时间按所述更改规则进行更改,得到对应的第二动态码位数和第二有效时间,所目标用户令牌由预设的用于生成动态码的策略生成;

依据所述目标用户令牌中的签名以及所述第二动态码位数按照第二预设规则进行计算得到第一动态码,所述第一动态码的有效时间为所述第二有效时间。

本发明还提供一种动态码生成装置,包括:

统计概率单元,用于统计目标用户在预设时间内通过动态码认证成功的第一占比,以及计算所有用户在所述预设时间内通过动态码认证成功的第二占比;

计算差值单元,用于计算所述第一占比与第二占比的差值;

判断范围单元,用途于判断所述差值是否处于需要变更动态码的数值范围内;

更改规则单元,用于判定所述差值处于需要变更动态码的数值范围内时,获取对应所述数据范围的更改规则,并将目标用户令牌中的第一动态码位数和第一有效时间按所述更改规则进行更改,得到对应的第二动态码位数和第二有效时间,所目标用户令牌由预设的用于生成动态码的策略生成;

计算动码单元,用于依据所述目标用户令牌中的签名以及所述第二动态码位数按照第二预设规则进行计算得到第一动态码,所述第一动态码的有效时间为所述第二有效时间。

本发明还提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。

本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。

本发明的有益效果为:根据预设规则智能地对动态码的位数和有效时间进行更改,使得动态码的位数以及有效时间都不再固定,大大地提高了动态码的安全性,且无需人工干预,节省人力,由系统自动完成,效率更高,时效性也更好。

附图说明

图1为本发明一实施例中动态码生成方法的步骤示意图;

图2为本发明一实施例中动态码生成装置的结构示意框图;

图3为本发明一实施例的计算机设备的结构示意框图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

参照图1,本实施例中的动态码生成方法,包括:

步骤s1:统计目标用户在预设时间内通过动态码认证成功的第一占比,以及计算所有用户在所述预设时间内通过动态码认证成功的第二占比;

步骤s2:计算所述第一占比与所述第二占比的差值;

步骤s3:判断所述差值是否处于需要变更动态码的数值范围内;

步骤s4:若是,则获取对应所述数据范围的更改规则,将目标用户令牌中的第一动态码位数和第一有效时间按所述更改规则进行更改,得到对应的第二动态码位数和第二有效时间,获取对应所述数据范围的更改规则;

步骤s5:依据所述目标用户令牌中的签名以及所述第二动态码位数按照第二预设规则进行计算得到第一动态码,所述第一动态码的有效时间为所述第二有效时间。

可以理解的是,在一个公司的互联网构架中,可能会存在多个不同业务系统,例如一家银行,其客户会使用保险系统完成查询、投保等一系列操作,会使用交易系统进行投资、取款等等一系列操作。而为了用户的账户安全,一般情况下用户想要在业务系统中进行操作之前需要进行身份验证,用户通过发送动态码生成请求,以获取动态码进行认证,本发明并不限制生成动态码的应用场景。现有技术中,动态码为固定的位数以及固定有效时间,安全性不高,本发明提供的方法可以实现可变的位数以及可变的有效时间,即用户每一次的请求得到的动态码的位数和有效时间都可能不一样,大大地提高了安全性。

本实施例中,目标用户可在使用上述业务系统时进行动态码认证,在认证之前需获取到动态码。具体生成动态码过程可通过动态码生成系统来完成,如上述步骤s1所述,统计目标用户在预设时间内通过动态码认证成功的占比,即第一占比,例如通过计算预设时间内目标用户认证成功的次数与所有请求认证的次数的比值得到上述第一占比。同时计算所有用户在该预设时间内通过动态码认证成功的占比,即第二占比,例如计算在预设时间内所有用户认证成功的次数与所有请求认证的次数的比值,然后计算第一占比和第二占比的差值,这样就可以通过比较目标用户和所有用户的差别来确定目标用户是不是稳定的用户,是不是安全性在普遍水平的用户,上述所有用户是指采用上述动态码生成系统来完成动态码认证的全部用户。

如上述步骤s3和步骤s4所述,将第一占比与第二占比进行比较,即是将目标用户的动态码认证成功占比与所有用户的动态码认证成功占比进行比较,若两者差不多,表明该目标用户较为稳定,其动态码不需要自动变化,但是第一占比比第二占比过高或过低,都说明与普遍水平的用户有差别,可能存在风险,都需要提高安全性。上述数值范围为预设的范围,包括不需要变更动态码的范围以及需要变更动态码的范围,其中对于需要变更动态码的范围中,不同的数值范围对应不同的更改规则。首先判断上述差值是否处在需要变更动态码的数值范围内,若上述差值落在需要变更动态码的数值范围内,则可获取对应该数值范围的更改规则,然后按照该更改规则来进行更改令牌属性,即更改上述第一动态码位数和第一有效时间。例如,第一占比为p,第二占比为p1,第一有效时间为t,第一动态码位数为c,若差值处于大于0.2的数值范围时,更改规则为c=c-1,t=t-0.5;当差值处于小于-0.2的数值范围时,对应的更改规则为c=c+1,t=t+0.5,而差值处于-0.2至0.2之间时,则可判断不需要对动态码进行变更。在一具体例子中c为4,t为10s,当p-p1>0.2时,则通过更改规则计算得到c=3,t=9.5s;当p-p1<-0.2,则通过更改规则计算得到c=5,t=10.5s。其中,当p-p1处于-0.2到0.2之间,则动态码的位数和有效时间不发生变化。另外,由于预先设定了变化范围,例如4<c<8、2<t<30,则当c或t达到了变化范围的临界值之后,只能取其临界值,这样动态码的位数和有效时间不会出现无限变大或变小。

如上述步骤s5所述,每个用户对应唯一的签名,首先可通过uuid(universallyuniqueidentifier,通用唯一识别码)生成器随机生成一串字符串,然后通过对该字符串进行base64转换,生成新的字符串,该新的字符串即为上述签名,并该签名与用户信息(如用户手机号码、账号等)关联,记录到用户令牌中。本实施例中,通过目标用户令牌中的第二动态码位数和第二有效时间按第二预设规则计算得到上述第一动态码,进一步可依据目标用户的手机号码将该第一动态码发送到目标用户的手机。

在另一个实施例中,当依据上述差值所处的数值范围对应为不需要变更动态码,则直接使用签名以及第一动态码位数按照第二预设规则进行计算得到第二动态码,该第二动态码对应的有效时间为第一有效时间。

其中,按照第二预设规则生成动态码的步骤如下,即上述步骤s5,包括:

步骤s51:获取所述第二动态码位数、所述签名以及第一时间戳;

步骤s52:将所述第一时间戳转换成二进制的第一时间戳之后向预设方向位移指定位数得到二进制的第二时间戳;

步骤s53:对所述签名以及所述第二时间戳通过mac算法进行运算得到第一数组;

步骤s54:将所述第一数组与预设数值进行按位与运算得到第一偏移量;

步骤s55:依据所述第一数组和所述第一偏移量进行计算得到第一整数;

步骤s56:依据所述第一整数进行计算得到初始动态码;

步骤s57:判断所述初始动态码的位数是否为第二动态码位数;

步骤s58:若是,则将所述初始动态码默认为所述第一动态码,若否,则在所述初始动态码的预设位置添加预设数字,直至被添加预设数字的初始动态码的位数与第二动态码位数一致,并将添加预设数字后的初始动态码记为所述第一动态码。

如上述步骤s51及s52所述,从目标用户令牌中获取第二动态码位数、签名,以及动态码生成系统的第一时间戳,上述时间戳是指使用数字签名技术时,对原始文件信息、签名参数、签名时间等构成的对象进行数字签名而产生的数据,用以证明原始文件在签名时间之前已经存在,时间戳是自1970年01月01日00时00分00秒起至当前时间的总毫秒数,计算当前时间戳时可将当前时间减去19700101000000。本实施例中,将当前时间减去19700101得到的上述第一时间戳,然后转换成二进制,得到上述二进制第一时间戳,然后将二进制第一时间戳向预设方向位移指定的位数得到新的二进制时间戳,即上述二进制第二时间戳,例如,将第一时间戳向左移12位得到上述第二时间戳(new_time=time<<12)。

如上述步骤s53以及s54所述,对上述签名和第二时间戳通过mac算法进行运算,得到第一数组,表达式如下:bytes[]hash=mac(seed,new_time),其中bytes[]hash为上述第一数组,seed为上述签名,new_time为上述第二时间戳,而mac算法为现有技术,这里计算过程不再赘述。得到上述第一数组之后,将第一数组和预设数值进行按位与运算得到上述第一偏移量,例如将第一数组和18进行按位与运算,表达式如下:offset=hash&18,其中,offset为第一偏移量,hash为上述第一数组。

如上述步骤s55及s56所述,将第一数组和第一偏移量按预设公式进行计算得到第一整数,其中,预设公式如下:

n=((hash[offset]&0x6f)<<8a)|((hash[offset+2]&0x7f)<<4a)|((hash[offset+4]&0x8f)<<2a),其中n为上述第一整数,a为自然整数数值(如1或2),0x6f、0x7f、0x8f为16进制数。

如上述a为2,第一偏移量为6时,先在上述第一数组中取第6个数据:hash[offset],然后与十六进制数0x6f进行按位与计算,再向左移16位数得到一个数值;在上述第一数组中取第8(offset+2)个数据:hash[offset+2],然后与十六进制数0x7f进行按位与计算,再向左移8位得到一个数值;在上述第一数组中取第10(offset+4)个数据,然后与十六进制数0x8f进行按位与计算,再向左移4位得到一个数值,然后将这三个数值进行按位或运算,即将这三个数值按二进制进行“或”运算,最后得到上述第一整数,如计算得到一个整数63696756,然后将第一整数进行计算得到初始动态码,例如将第一整数求余得到初始动态码,则可利用如下公式:

p=n%10^c,其中p为初始动态码,n为第一整数,c为所述第二动态码位数,如上述第一整数63696756通过第二预设公式计算得到初始动态码696756。

如上述步骤s57及s58所述,由于通过上述步骤计算得到的初始动态码的位数可能与上述第二动态码位数不一致,故而先判断初始动态码的位数是否为第二动态码位数,若初始动态码的位数恰好为第二动态码位数,则该初始动态码默认为上述第一动态码,否则,即初始动态码的位数比第二动态码位数小,这时可在初始动态码的预设位置添加预设数字,直至添加预设数字的初始动态码的位数与第二动态码位数一致,例如在初始动态码696756的起始位置加0,直接补够第二动态码位数(如7位),即得到添加预设数字的初始动态码0696756。

在一个实施例中,上述步骤s1之前,包括:

步骤s01:接收目标用户发送的动态码生成请求;

步骤s02:依据所述动态码生成请求获取对应的用于生成动态码的策略;

步骤s03:依据所述策略判断所述目标用户的认证状态是否为认证已被锁定状态;

步骤s04:若所述认证状态不为认证已被锁定状态,则检测所述策略中的自动变化功能是否已被开启,所述自动化功能为变更动态码的位数以及有效时间的功能;

步骤s05:若所述策略中的自动变化功能已被开启,则通过随机选择是否启用所述自动变化功能;

步骤s06:若启用所述自动变化功能,则生成统计所述第一占比的指令。

如上述步骤s01及s02所述,上述方法通过动态码生成系统实现,当目标用户在上述业务系统进行对应的操作,会在上述业务系统中触发动态码生成请求,然后发送至所述动态码生成系统,为了便于描述,本实施例中将目标用户使用的业务系统记作第一业务系统,动态码生成系统接收到该请求之后,由于该请求中包含有第一业务系统以及目标用户的信息,则可依据该请求得到第一业务系统的系统id,本实施例中,为了区别每一个业务系统,可对每一业务系统进行设定唯一的系统id,且由于每个业务系统对应一个策略,这些策略用于生成动态码,策略中包括有动态码位数、有效时间、认证失败次数、是否支持自动变化等信息。当然,也可以对每一个策略进行设定策略id,这时可通过系统id获得对应的策略id,根据策略id从数据库(mongodb)中将该策略缓存至第一业务系统,这样使得后期运行得更畅顺。

如上述步骤s03所述,由于当前目标用户发送来的动态码认证请求,有可能是在多次认证失败的基础上发送过来的,而多次认证失败说明目标用户可能不是本人操作,存在极大风险,故上述认证状态包括对次认证失败之后账号被锁定的认证已锁定状态,以及还没有开始认证或者认证次数不多但失败(这是由于用户误操作造成)的待认证状态,这些状态均记录在上述策略当中,当接收到动态码生成请求之后,依据策略中的记录,判断目标用的认证状态是否已被锁定,若已被锁定,则结束该次动态码生成请求,若为待认证状态,则继续下一步。

本实施例中,开发人员可以针对不同的业务系统设置策略的自动变化功能,该自动化功能为变更动态码的位数以及有效时间的功能,如可以选择开启或者关闭该自动变化功能,若开发人员选择开启这个自动变化功能,则开发人员可输入动态码位数和有效时间的变化范围参数,如输入4<动态码位数<8、2<有效时间<30等,该功能即为在生成的动态码与上次生成动态码相比,其位数和有效时间均可不相同的,若开发人员选择关闭该自动变化功能,则动态码生成系统最终生成的动态码的位数和有效时间不会发生变化。如上述步骤s04所述,当判定认证状态为之后,动态码生成系统对上述策略进行检测,查看上述策略中的自动变化功能是否已被开启。

如上述步骤s05-s06所述,为了进一步提高动态码的安全性,进一步防止破译动态码,在开启上述自动变化功能之后,可进入随机启用状态,即随机选择是否启用自动变化功能,例如,先设定50%的概率会进行启用自动变化功能,即开启了自动变化功能之后,会有50%的可能性会依据自动变化功能的策略来生成上述第一动态码(位数和有效时间与前一次相比有变化),但是也有50%的可能会直接按第二预设规则生成固定的动态码(位数和有效时间与前一次相比没有变化)。当按随机选择启用了自动变化功能,那么动态码生成系统会生成统计第一占比的指令,依据该指令统计目标用户在预设时间内通过动态码认证成功的第一占比,再按照步骤s2-s5的步骤执行,从而得到第一动态码。

在一个实施例中,上述步骤s04之后,包括:

步骤s040:若所述策略中的自动变化功能未开启,则依据所述签名和所述第一动态码位数按照所述第二预设规则进行计算得到所述第二动态码,所述第二动态码的有效时间为所述第一有效时间。

本实施例中,由于策略中的自动变化功能可以开启或者关闭,当检测到自动变化功能未开启时,即表明生成的动态码的位数和有效时间与上一次一样,无需作改变,即可直接依据上述签名和没有更改的第一动态码位数作为计算参数,按照上述第二预设规则进行计算,其中,按第二预设规则计算的过程参照上述步骤s51-s58,最终得到第二动态码,其有效时间为没有更改过的第一有效时间。

在一个实施例中,上述步骤s03,包括:

步骤s031:依据所述策略的策略id以及目标用户的用户信息查询是否已存在所述目标用户令牌;

步骤s032:若否,则对应所述用户信息生成所述目标用户令牌,并将所述策略中的初始动态码位数、初始有效时间以及所述目标用户的签名记录到所述目标用户令牌,并将所述初始动态码位数记为所述第一动态码位数,初始有效时间记为所述第一有效时间;

步骤s033:若是,检测所述目标用户令牌中目标用户的认证状态,其中,所述认证状态包括待认证以及认证已锁定。

本实施例中,已知的是,用户通过第一业务系统发送动态码请求,例如用户登录第一业务系统时发送的动态码请求,该用户并不一定是第一业务系统已有的用户,也有可能是新注册的用户,这时动态码生成系统中并没有用户的信息,对应的策略中也没有对应该用户的签名等。故而在获取了策略之后,要查询对应目标用户的目标用户令牌是否存在,由于每个业务系统可对应一个策略,一个策略可对应多个用户,故而依据策略id和目标用户的用户信息来查询是否存在目标用户令牌,其中用户信息可以为用户的手机号码或者账号等,用于表明目标用户的身份。

如上述步骤s032所述,当查询到已存在目标用户令牌,则无需建立令牌,直接使用即可,当没有查询到目标用户令牌,说明目标用户是新的用户,这时需要针对目标用户建立令牌,且将该令牌关联目标用户的用户信息,同时依据用户的信息通过uuid生成器随机生成对应目标用户的签名,然后将初始动态码位数、初始有效时间以及签名记录到该令牌中,而此处的初始动态码位数和初始有效时间即为上述第一动态码位数和第一有效时间。

如上述步骤s033所述,当查询到目标用户令牌,即表明目标用户是老用户,已经在该第一业务系统注册或者使用过,这时可检测目标用户令牌中的认证状态,已知认证状态包括对次认证失败之后账号被锁定的认证已锁定状态,以及还没有开始认证或者认证次数不多但失败(这是由于用户误操作造成)的待认证状态,这些状态均记录在上述令牌当中。当认证状态为认证已锁定,那么系统直接结束该次请求,避免用户账号被盗用。当认证状态为待认证,那么可执行上述步骤s04-s06。

在一个实施例中,上述步骤s033,包括:

步骤s0331:获取所述目标用户在预设时间内的认证失败次数;

步骤s0332:判断所述认证失败次数是否大于预设次数;

步骤s0332:若是,则判定所述认证状态为所述认证已锁定,若否,在判定所述认证状态为所述待认证。

本实施例中,由于认证状态包括认证已锁定以及待认证,本实施例中,可通过认证失败次数来判定认证的状态,例如在30分钟内认证失败的次数超过3次,第一业务系统即锁定目标用户的账号,即预设次数为3次,当目标用户再次发起请求时,动态码生成系统会获取目标用户在30分钟内认证失败的次数,如4次,然后对比认证失败次数和预设次数,则可判定认证同样被锁定,即认证状态为认证已锁定,若目标用户识别的次数为2次,那么可判定认证状态为待认证,这时可执行上述步骤s04-s06。

参照图2,本实施例中动态码生成装置,包括:

统计概率单元100,用于统计目标用户在预设时间内通过动态码认证成功的第一占比,以及计算所有用户在所述预设时间内通过动态码认证成功的第二占比;

计算差值单元200,用于计算所述第一占比与第二占比的差值;

判断范围单元300,用途于判断所述差值是否处于需要变更动态码的数值范围内;

更改规则单元400,用于判定所述差值处于需要变更动态码的数值范围内时,获取对应所述数据范围的更改规则,并将目标用户令牌中的第一动态码位数和第一有效时间按所述更改规则进行更改,得到对应的第二动态码位数和第二有效时间,所目标用户令牌由预设的用于生成动态码的策略生成;

计算动码单元500,用于依据所述目标用户令牌中的签名以及所述第二动态码位数按照第二预设规则进行计算得到第一动态码,所述第一动态码的有效时间为所述第二有效时间。

可以理解的是,在一个公司的互联网构架中,可能会存在多个不同业务系统,例如一家银行,其客户会使用保险系统完成查询、投保等一系列操作,会使用交易系统进行投资、取款等等一系列操作。而为了用户的账户安全,一般情况下用户想要在业务系统中进行操作之前需要进行身份验证,用户通过发送动态码生成请求,以获取动态码进行认证,本发明并不限制生成动态码的应用场景。现有技术中,动态码为固定的位数以及固定有效时间,安全性不高,本发明提供的装置可以实现可变的位数以及可变的有效时间,即用户每一次的请求得到的动态码的位数和有效时间都可能不一样,大大地提高了安全性。

本实施例中,目标用户可在使用上述业务系统时进行动态码认证,在认证之前得获取到动态码。具体生成动态码过程可通过上述动态码生成装置来完成,如上述统计概率单元100所述,统计目标用户在预设时间内通过动态码认证成功的占比,即第一占比,例如通过计算预设时间内目标用户认证成功的次数与所有请求认证的次数的比值得到上述第一占比。同时计算所有用户在该预设时间内通过动态码认证成功的占比,即第二占比,例如计算在预设时间捏所有用户认证成功的次数与所有请求认证的次数的比值,然后计算第一占比和第二占比的差值,这样就可以通过比较目标用户和所有用户的差别来确定目标用户是不是稳定的用户,是不是安全性在普遍水平的用户,上述所有用户是指采用上述动态码生成系统来完成动态码认证的全部用户。

如上述判断范围单元300以及更改规则单元400所述,将第一占比与第二占比进行比较,即是将目标用户的动态码认证成功占比与所有用户的动态码认证成功占比进行比较,若两者差不多,表明该目标用户较为稳定,其动态码不需要自动变化,但是第一占比比第二占比过高或过低,都说明与普遍水平的用户有差别,可能存在风险,都需要提高安全性。上述数值范围为预设的范围,包括不需要变更动态码的范围以及需要变更动态码的范围,其中对于需要变更动态码的范围中,不同的数值范围对应不同的更改规则。首先判断上述差值是否处在需要变更动态码的数值范围内,若上述差值落在需要变更动态码的数值范围内,则可获取对应该数值范围的更改规则,然后按照该更改规则来进行更改令牌属性,即更改上述第一动态码位数和第一有效时间。例如,第一占比为p,第二占比为p1,第一有效时间为t,第一动态码位数为c,若差值处于大于0.2的数值范围时,更改规则为c=c-1,t=t-0.5;当差值处于小于-0.2的数值范围时,对应的更改规则为c=c+1,t=t+0.5,而差值处于-0.2至0.2之间时,则可判断不需要对动态码进行变更。在一具体例子中c为4,t令t为10s,当p-p1>0.2时,则通过更改规则计算得到c=3,t=9.5s;当p-p1<-0.2,则通过更改规则计算得到c=5,t=10.5s。其中,当p-p1处于-0.2到0.2之间,则动态码的位数和有效时间不发生变化。另外,由于预先设定了变化范围,例如4<c<8、2<t<30,则当c或t达到了变化范围的临界值之后,只能取其临界值,这样动态码的位数和有效时间不会出现无限变大或变小。

如上述计算动码单元500所述,每个用户对应唯一的签名,首先可通过uuid(universallyuniqueidentifier,通用唯一识别码)生成器随机生成一串字符串,然后通过对该字符串进行base64转换,生成新的字符串,该新的字符串即为上述签名,并该签名与用户信息(如用户手机号码、账号等)关联,记录到用户令牌中。本实施例中,通过目标用户令牌中的第二动态码位数和第二有效时间通过第二预设规则计算得到上述第一动态码,进一步可依据目标用户的手机号码将该第一动态码发送到目标用户的手机。

在另一个实施例中,当依据上述差值所处的数值范围对应为不需要变更动态码,则直接使用签名以及第一动态码位数按照第二预设规则进行计算得到第二动态码,该第二动态码对应的有效时间为第一有效时间。

其中,上述计算动码单元500,包括:

获取位数子单元,用于获取所述第二动态码位数、所述签名以及第一时间戳;

位移位数子单元,用于将所述第一时间戳转换成二进制的第一时间戳之后向预设方向位移指定位数得到二进制的第二时间戳;

运算数组子单元,用于对所述签名以及所述第二时间戳通过mac算法进行运算得到第一数组;

按位计算子单元,用于将所述第一数组与预设数值进行按位与运算得到第一偏移量;

第一计算子单元,用于依据所述第一数组和所述第一偏移量进行计算得到第一整数;

第二计算子单元,用于依据所述第一整数进行计算得到初始动态码;

判断位数子单元,用于判断所述初始动态码的位数是否为第二动态码位数;

添加数字子单元,用于判定所述初始动态码的位数为第二动态码位数,则将所述初始动态码默认为所述第一动态码,若否,则在所述初始动态码的预设位置添加预设数字,直至被添加预设数字的初始动态码的位数与第二动态码位数一致,并将添加预设数字后的初始动态码记为所述第一动态码。

如上述获取位数子单元及位移位数子单元所述,从目标用户令牌中获取第二动态码位数、签名,以及当前时间的第一时间戳,上述时间戳是指使用数字签名技术时,对原始文件信息、签名参数、签名时间等构成的对象进行数字签名而产生的数据,用以证明原始文件在签名时间之前已经存在,时间戳是自1970年01月01日00时00分00秒起至当前时间的总毫秒数,计算当前时间戳时可将当前时间减去19700101000000。本实施例中,将当前时间减去19700101得到的一个上述第一时间戳,然后转换成二进制,得到上述二进制第一时间戳,然后将二进制第一时间戳向预设方向位移指定的位数得到新的二进制时间戳,即上述二进制第二时间戳,例如,将第一时间戳向左移12位得到上述第二时间戳(new_time=time<<12)。

如上述运算数组子单元以及按位计算子单元所述,对上述签名和第二时间戳通过mac算法进行运算,得到第一数组,表达式如下:bytes[]hash=mac(seed,new_time),其中bytes[]hash为上述第一数组,seed为上述签名,new_time为上述第二时间戳,而mac算法为现有技术,这里计算过程不再赘述。得到上述第一数组之后,将第一数组和预设数值进行按位与运算得到上述第一偏移量,例如将第一数组和18进行按位与运算,表达式如下:offset=hash&18,其中,offset为第一偏移量,hash为上述第一数组。

如上述第一计算子单元及第二计算子单元所述,将第一数组和第一偏移量按预设公式进行计算得到第一整数,其中,预设公式如下:

n=((hash[offset]&0x6f)<<8a)|((hash[offset+2]&0x7f)<<4a)|((hash[offset+4]&0x8f)<<2a),其中n为上述第一整数,a为自然整数数值(如1),0x6f、0x7f、0x8f为16进制数。

如上述a为2,第一偏移量为6时,先将在上述第一数组中取第6个数据:hash[offset],然后与十六进制数0x6f进行按位与计算,再向左移16位数得到一个数值;将在上述第一数组中取第8(offset+2)个数据:hash[offset+2],然后与十六进制数0x7f进行按位与计算,再向左移8位得到一个数值;将在上述第一数组中取第10(offset+4)个数据,然后与十六进制数0x8f进行按位与计算,再向左移4位得到一个数值,然后将这三个数值进行按位或运算,即将这三个数值按二进制进行“或”运算,最后得到上述第一整数,如计算得到一个整数63696756,然后将第一整数进行计算得到初始动态码,例如将第一整数求余得到初始动态码,则可利用如下公式:

p=n%10^c,其中p为初始动态码,n为第一整数,c为所述第二动态码位数,如上述第一整数63696756通过第二预设公式计算得到初始动态码696756。

如上述判断位数子单元及添加数字子单元所述,由于通过上述算式计算得到的初始动态码的位数可能与上述第二动态码位数不一致,故而先判断初始动态码的位数是否为第二动态码位数,若初始动态码的位数恰好为第二动态码位数,则该初始动态码默认为上述第一动态码,否则,即初始动态码的位数比第二动态码位数小,这时可在初始动态码的预设位置添加预设数字,直至添加预设数字的初始动态码的位数与第二动态码位数一致,例如在初始动态码696756的起始位置加0,直接补够第二动态码位数(如7位),即得到添加预设数字的初始动态码0696756。

在一个实施例中,上述动态码生成装置,包括:

接收请求单元,用于接收目标用户发送的动态码生成请求;

获取策略单元,用于依据所述动态码生成请求获取对应的用于生成动态码的策略;

判断状态单元,用于依据所述策略判断所述目标用户的认证状态是否为认证已被锁定状态;

检测功能单元,用于所述认证状态不为认证已被锁定状态时,则检测所述策略中的自动变化功能是否已被开启,所述自动化功能为变更动态码的位数以及有效时间的功能;

启用功能子单元,用于所述策略中的自动变化功能已被开启时,则通过随机选择是否启用所述自动变化功能;

生成指令单元,用于启用所述自动变化功能时,生成统计所述第一占比的指令。

如上述接收请求单元及获取策略单元所述,当目标用户在上述业务系统进行对应的操作,会在上述业务系统中触发动态码生成请求,然后发送至所述动态码生成装置,为了便于描述,本实施例中将目标用户使用的业务系统记作第一业务系统,动态码生成装置接收到该请求之后,由于该请求中包含有第一业务系统以及目标用户的信息,则可依据该请求得到第一业务系统的系统id,本实施例中,为了区别每一个业务系统,可对每一业务系统进行设定唯一的系统id,且由于每个业务系统对应一个策略,这些策略用于生成动态码,策略中包括有动态码位数、有效时间、认证失败次数、是否支持自动变化等信息。当然,也可以对每一个策略进行设定策略id,这时可通过系统id获得对应的策略id,根据策略id从数据库(mongodb)中将策略缓存至第一业务系统,这样使得后期运行得更畅顺。

如上述判断状态单元所述,由于当前目标用户发送来的动态码认证请求,有可能是在多次认证失败的基础上发送过来的,而多次认证失败说明目标用户可能不是本人操作,存在极大风险,故上述认证状态包括对次认证失败之后账号被锁定的认证已锁定状态,以及还没有开始认证或者认证次数不多但失败(这是由于用户误操作造成)的待认证状态,这些状态均记录在上述策略当中,当接收到动态码生成请求之后,依据策略中的记录,判断目标用的认证状态是否已被锁定,若已被锁定,则结束该次动态码生成请求,若为待认证状态,则继续下一步。

本实施例中,开发人员可以针对不同的业务系统设置策略的自动变化功能,该自动化功能为变更动态码的位数以及有效时间的功能,如可以选择开启或者关闭该自动变化功能,若开发人员选择开启这个自动变化功能,则开发人员可输入动态码位数和有效时间的变化范围参数,如输入4<动态码位数<8、2<有效时间<30等,该功能即为在生成的动态码与上次生成动态码相比,其位数和有效时间均可不相同的,若开发人员选择关闭该自动变化功能,则动态码生成装置最终生成的动态码的位数和有效时间不会发生变化。当判定认证状态为之后,动态码生成装置对策略进行检测,查看策略中的自动变化功能是否已被开启。

如上述启用功能单元以及生成指令单元所述,为了进一步提高动态码的安全性,进一步防止破译动态码,在开启上述自动变化功能之后,可进入随机启用状态,即随机选择是否启用自动变化功能,例如,先设定50%的概率会进行启用自动变化功能,即开启了自动变化功能之后,会有50%的可能性会依据自动变化功能的策略来生成上述第一动态码(位数和有效时间与前一次相比有变化),但是也有50%的可能会直接按第二预设规则生成固定的动态码(位数和有效时间与前一次相比没有变化)。当按随机选择启用了自动变化功能,那么动态码生成装置会生成统计第一占比的指令,依据该指令统计目标用户在预设时间内通过动态码认证成功的第一占比。

在一个实施例中,上述动态码生成装置,包括:

计算动码单元,用于若所述策略中的自动变化功能未开启,则依据所述签名和所述第一动态码位数按照所述第二预设规则进行计算得到所述第二动态码,所述第二动态码的有效时间为所述第一有效时间。

本实施例中,由于策略中的自动变化功能可以开启或者关闭,当检测到自动变化功能未开启时,即表明生成的动态码的位数和有效时间与上一次一样,无需作改变,即可直接依据上述签名和没有更改的第一动态码位数作为计算参数,按照上述第二预设规则进行计算,其中,按第二预设规则计算的过程参照上述计算动码单元500,最终得到第二动态码,其有效时间为没有更改过的第一有效时间。

在一个实施例中,上述判断状态单元,包括:

查询令牌子单元,用于依据所述策略的策略id以及目标用户的用户信息查询是否已存在所述目标用户令牌;

记录令牌子单元,用于在查询不到已存在所述目标用户令牌,则对应所述用户信息生成所述目标用户令牌,并将所述策略中的初始动态码位数、初始有效时间以及所述目标用户的签名记录到所述目标用户令牌,并将所述初始动态码位数记为所述第一动态码位数,初始有效时间记为所述第一有效时间;

检测状态子单元,用于用于在查询已存在所述目标用户令牌,检测所述目标用户令牌中目标用户的认证状态,其中,所述认证状态包括待认证以及认证已锁定。

本实施例中,已知的是,用户通过第一业务系统发送动态码请求,例如用户登录第一业务系统时发送的动态码请求,该用户并不一定是第一业务系统已有的用户,也有可能是新注册的用户,这时上述装置中并没有用户的信息,对应的策略中也没有对应该用户的签名等。故而在获取了策略之后,要查询对应目标用户的目标用户令牌是否存在,由于每个业务系统可对应一个策略,一个策略可对应多个用户,故而依据策略id和目标用户的用户信息来查询是否存在目标用户令牌,其中用户信息可以为用户的手机号码或者账号等,用于表明目标用户的身份。

如上述记录令牌子单元所述,当查询到已存在目标用户令牌,则无需建立令牌,直接使用即可,当没有查询到目标用户令牌,说明目标用户是新的用户,这时需要针对目标用户建立令牌,且将该令牌关联目标用户的用户信息,同时依据用户的信息通过uuid生成器随机生成对应目标用户的签名,然后将初始动态码位数、初始有效时间以及签名记录到该令牌中,而此处的初始动态码位数和初始有效时间即为上述第一动态码位数和第一有效时间。

如上述检测状态子单元所述,当查询到目标用户令牌,即表明目标用户是老用户,已经在该第一业务系统注册或者使用过,这时可检测目标用户令牌中的认证状态,已知认证状态包括对次认证失败之后账号被锁定的认证已锁定状态,以及还没有开始认证或者认证次数不多但失败(这是由于用户误操作造成)的待认证状态,这些状态均记录在上述令牌当中。当认证状态为认证已锁定,那么系统直接结束该次请求,避免用户账号被盗用。

在一个实施例中,上述检测状态子单元,包括:

获取次数模块,用于获取所述目标用户在预设时间内的认证失败次数;

判断次数模块,用于判断所述认证失败次数是否大于预设次数;

判定状态模块,用于判断所述认证失败次数大于预设次数,则判定所述认证状态为所述认证已锁定,若否,在判定所述认证状态为所述待认证。

本实施例中,由于认证状态包括认证已锁定以及待认证,本实施例中,可通过认证失败次数来判定认证的状态,例如在30分钟内认证失败的次数超过3次,第一业务系统即锁定目标用户的账号,即预设次数为3次,当目标用户再次发起请求时,动态码生成装置会获取目标用户在30分钟内认证失败的次数,如4次,然后对比认证失败次数和预设次数,则可判定认证同样被锁定,即认证状态为认证已锁定,若目标用户识别的次数为2次,那么可判定认证状态为待认证,这时可按上述检测功能单元执行。

参照图3,本发明实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储生成动态码所需的所有数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种动态码生成方法。

上述处理器执行上述动态码生成方法的步骤:统计目标用户在预设时间内通过动态码认证成功的第一占比,以及计算所有用户在所述预设时间内通过动态码认证成功的第二占比;计算所述第一占比与第二占比的差值;判断所述差值是否处于需要变更动态码的数值范围内;若是,则获取对应所述数据范围的更改规则,并将目标用户令牌中的第一动态码位数和第一有效时间按所述更改规则进行更改,得到对应的第二动态码位数和第二有效时间,所目标用户令牌由预设的用于生成动态码的策略生成;依据所述目标用户令牌中的签名以及所述第二动态码位数按照第二预设规则进行计算得到第一动态码,所述第一动态码的有效时间为所述第二有效时间。

上述计算机设备,上述依据所述签名以及所述第二动态码位数按照第二预设规则进行计算得到第一动态码的步骤,包括:获取所述第二动态码位数、所述签名以及第一时间戳;将所述第一时间戳转换成二进制的第一时间戳之后向预设方向位移指定位数得到二进制的第二时间戳;对所述签名以及所述第二时间戳通过mac算法进行运算得到第一数组;将所述第一数组与预设数值进行按位与运算得到第一偏移量;依据所述第一数组和所述第一偏移量进行计算得到第一整数;依据所述第一整数进行计算得到初始动态码;判断所述初始动态码的位数是否为第二动态码位数;若是,则将所述初始动态码默认为所述第一动态码,若否,则在所述初始动态码的预设位置添加预设数字,直至被添加预设数字的初始动态码的位数与第二动态码位数一致,并将添加预设数字后的初始动态码记为所述第一动态码。

在一个实施例中,上述依据所述第一数组和所述第一偏移量进行计算得到第一整数的步骤,包括:利用以下公式计算得到所述第一整数:n=((hash[offset]&0x6f)<<8a)|((hash[offset+2]&0x7f)<<4a)|((hash[offset+4]&0x8f)<<2a);其中,n为所述第一整数,a为自然整数数值,hash为所述第一数组,offset为所述第一偏移量,0x6f、0x7f、0x8f为16进制数。

在一个实施例中,上述依据所述第一整数进行计算得到初始动态码的步骤,包括:利用以下公式计算得到所述初始动态码:p=n%10^c;其中p为初始动态码,n为所述第一整数,c为所述第二动态码位数。

在一个实施例中,上述统计目标用户在预设时间内通过动态码认证成功的第一占比的步骤之前,包括:接收目标用户发送的动态码生成请求;依据所述动态码生成请求获取对应的用于生成动态码的策略;依据所述策略判断所述目标用户的认证状态是否为认证已被锁定状态;若所述认证状态不为认证已被锁定状态,则检测所述策略中的自动变化功能是否已被开启,所述自动化功能为变更动态码的位数以及有效时间的功能;若所述策略中的自动变化功能已被开启,则通过随机选择是否启用所述自动变化功能;若启用所述自动变化功能,则生成统计所述第一占比的指令。

在一个实施例中,上述检测所述策略中的自动变化功能是否已被开启的步骤之后,包括:若所述策略中的自动变化功能未开启,则依据所述签名和所述第一动态码位数按照所述第二预设规则进行计算得到所述第二动态码,所述第二动态码的有效时间为所述第一有效时间。

在一个实施例中,上述依据所述策略判断所述目标用户的认证状态是否已被锁定状态的步骤,包括:依据所述策略的策略id以及目标用户的用户信息查询是否已存在所述目标用户令牌;若否,则对应所述用户信息生成所述目标用户令牌,并将所述策略中的初始动态码位数、初始有效时间以及所述目标用户的签名记录到所述目标用户令牌,并将所述初始动态码位数记为所述第一动态码位数,初始有效时间记为所述第一有效时间;若是,检测所述目标用户令牌中目标用户的认证状态,其中,所述认证状态包括待认证以及认证已锁定。

本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。

本发明一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种动态码生成方法,具体为:统计目标用户在预设时间内通过动态码认证成功的第一占比,以及计算所有用户在所述预设时间内通过动态码认证成功的第二占比;计算所述第一占比与第二占比的差值;判断所述差值是否处于需要变更动态码的数值范围内;若是,则获取对应所述数据范围的更改规则,并将目标用户令牌中的第一动态码位数和第一有效时间按所述更改规则进行更改,得到对应的第二动态码位数和第二有效时间,所目标用户令牌由预设的用于生成动态码的策略生成;依据所述目标用户令牌中的签名以及所述第二动态码位数按照第二预设规则进行计算得到第一动态码,所述第一动态码的有效时间为所述第二有效时间。

上述计算机可读存储介质,上述依据所述签名以及所述第二动态码位数按照第二预设规则进行计算得到第一动态码的步骤,包括:获取所述第二动态码位数、所述签名以及第一时间戳;将所述第一时间戳转换成二进制的第一时间戳之后向预设方向位移指定位数得到二进制的第二时间戳;对所述签名以及所述第二时间戳通过mac算法进行运算得到第一数组;将所述第一数组与预设数值进行按位与运算得到第一偏移量;依据所述第一数组和所述第一偏移量进行计算得到第一整数;依据所述第一整数进行计算得到初始动态码;判断所述初始动态码的位数是否为第二动态码位数;若是,则将所述初始动态码默认为所述第一动态码,若否,则在所述初始动态码的预设位置添加预设数字,直至被添加预设数字的初始动态码的位数与第二动态码位数一致,并将添加预设数字后的初始动态码记为所述第一动态码。

在一个实施例中,上述依据所述第一数组和所述第一偏移量进行计算得到第一整数的步骤,包括:利用以下公式计算得到所述第一整数:n=((hash[offset]&0x6f)<<8a)|((hash[offset+2]&0x7f)<<4a)|((hash[offset+4]&0x8f)<<2a);其中,n为所述第一整数,a为自然整数数值,hash为所述第一数组,offset为所述第一偏移量,0x6f、0x7f、0x8f为16进制数。

在一个实施例中,上述依据所述第一整数进行计算得到初始动态码的步骤,包括:利用以下公式计算得到所述初始动态码:p=n%10^c;其中p为初始动态码,n为所述第一整数,c为所述第二动态码位数。

在一个实施例中,上述统计目标用户在预设时间内通过动态码认证成功的第一占比的步骤之前,包括:接收目标用户发送的动态码生成请求;依据所述动态码生成请求获取对应的用于生成动态码的策略;依据所述策略判断所述目标用户的认证状态是否为认证已被锁定状态;若所述认证状态不为认证已被锁定状态,则检测所述策略中的自动变化功能是否已被开启,所述自动化功能为变更动态码的位数以及有效时间的功能;若所述策略中的自动变化功能已被开启,则通过随机选择是否启用所述自动变化功能;若启用所述自动变化功能,则生成统计所述第一占比的指令。

在一个实施例中,上述检测所述策略中的自动变化功能是否已被开启的步骤之后,包括:若所述策略中的自动变化功能未开启,则依据所述签名和所述第一动态码位数按照所述第二预设规则进行计算得到所述第二动态码,所述第二动态码的有效时间为所述第一有效时间。

在一个实施例中,上述依据所述策略判断所述目标用户的认证状态是否已被锁定状态的步骤,包括:依据所述策略的策略id以及目标用户的用户信息查询是否已存在所述目标用户令牌;若否,则对应所述用户信息生成所述目标用户令牌,并将所述策略中的初始动态码位数、初始有效时间以及所述目标用户的签名记录到所述目标用户令牌,并将所述初始动态码位数记为所述第一动态码位数,初始有效时间记为所述第一有效时间;若是,检测所述目标用户令牌中目标用户的认证状态,其中,所述认证状态包括待认证以及认证已锁定。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储与一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram一多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双速据率sdram(ssrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1