物联网动态密码的生成及验证方法、系统和计算机设备与流程

文档序号:18226330发布日期:2019-07-19 23:29阅读:343来源:国知局
物联网动态密码的生成及验证方法、系统和计算机设备与流程

本申请涉及密码生成和验证技术领域,特别涉及一种物联网动态密码的生成及验证方法、系统和计算机设备。



背景技术:

物联网通信应用中,客户端与服务端通常采用mqtt协议进行数据通信,客户端通过该协议接入服务端支持两种方式:a、地址(host)+用户名(username)+密码(password)+客户端标识符(clientidentifier);b、地址(host)+客户端标识符(clientidentifier)。

因b方式不使用密码,存在接入无验证的安全风险,通常为了安全,多采用方式a,但在实际应用中方式a存在密码明文被抓包劫取的风险,因此需要“动态密码”规避此风险。



技术实现要素:

本申请的主要目的为提供一种物联网动态密码的生成及认证方法、系统和计算机设备,旨在解决目前物联网通信应用中存在密码明文容易被抓包劫取的风险的问题。

为实现上述目的,本申请提供了一种物联网动态密码的生成方法,包括以下步骤:

客户端获取密码生成指令;

生成随机字符,并获取timestamp、host和username,其中,所述timestamp是当前时间戳,所述host为客户端地址,所述username是用户名;

将所述随机字符、所述timestamp、所述host和所述username按照第一预设规则连接起来,得到第一字符串;

将所述第一字符串按照第二预设规则进行排序,得到initialstring;

将所述initialstring通过hash加密算法进行加密,得到tempstring;

按照第三预设规则在所述timestamp中截取第一自然数组,所述第一自然数组是由多个第一自然数构成的数组,每个所述第一自然数均小于10;在所述第一自然数组中,各所述第一自然数的前后顺序与所述timestamp中对应的字符的前后顺序相同;

将所述第一自然数组中的每个第一自然数减去设定自然数,并求绝对值,得到第二自然数组,所述第二自然数组是由多个第二自然数构成的数组;在所述第二自然数组中,所述第二自然数的前后顺序与所述第一自然数组中对应的第一自然数的前后顺序相同;其中,设定自然数小于或等于10;

在所述tempstring中查找所有与所述第二自然数组中每个所述第二自然数对应序位的临时字符,其中,所述序位是指每一个所述临时字符在所述tempstring中的排序位置;

根据所述临时字符与所述第二自然数的对应关系,将所述临时字符按照与所述第二自然数在所述第二自然数组中的顺序关系进行排序,得到password1。

进一步地,所述将所述随机字符、所述timestamp、所述host和所述username按照第一预设规则连接起来,得到第一字符串的步骤,包括:

将所述timestamp连接到所述随机字符后,得到clientid;

将所述clientid、所述host和所述username从前到后依次连接,得到所述第一字符串。

进一步地,所述将上述第一字符串按照第二预设规则进行排序,得到initialstring的步骤之前,还包括:

去除所述第一字符串中的标点符号。

进一步地,所述按照第三预设规则在所述timestamp中截取第一自然数组的步骤,包括:

从所述timestamp的第一个字符开始,向后截取预设位数的字符,将截取所获得的字符组作为所述第一自然数组。

本申请还提供了一种物联网动态密码的验证方法,用于解密依据上述任一项物联网动态密码的生成方法所生成的密码,包括以下步骤:

服务端接收客户端发送的所述随机字符、所述timestamp、所述host、所述username和所述password1;

通过所述随机字符、所述timestamp、所述host和所述username,按照预设的与所述物联网动态密码的生成方法相同的方法生成password2;

判断所述password2与所述password1是否相同;

若是,则判定为匹配成功,准许接入;

若否,则判定为匹配不成功,不准许接入。

进一步地,所述判断所述password2与所述password1是否相同的步骤之前,还包括:

获取servertime,其中,所述servertime是服务端获取的当前时间;

计算所述servertime与所述timestamp的时间差值;

判断所述时间差值是否大于设定阈值;

若是,则不不准许接入;

若否,则生成执行“判断所述password2与所述password1是否相同”的命令。

进一步地,所述判断所述password2与所述password1是否相同的步骤之前,还包括:

获取所述客户端历次接入请求所传来的时间戳记录;

在所述时间戳记录中,查找是否存在与所述timestamp相同的时间戳;

若是,则不不准许接入;

若否,则生成执行“判断所述password2与所述password1是否相同”的命令。

本申请还提供一种物联网动态密码的生成及验证系统,其特征在于,包括客户端和服务端;

所述客户端,用于获取密码生成指令;

生成随机字符,并获取timestamp、host和username,其中,所述timestamp是当前时间戳,所述host为客户端地址,所述username是用户名;

将所述随机字符、所述timestamp、所述host和所述username按照第一预设规则连接起来,得到第一字符串;

将所述第一字符串按照第二预设规则进行排序,得到initialstring;

将所述initialstring通过hash加密算法进行加密,得到tempstring;

按照第三预设规则在所述timestamp中截取第一自然数组,所述第一自然数组是由多个第一自然数构成的数组,每个所述第一自然数均小于10;在所述第一自然数组中,各所述第一自然数的前后顺序与所述timestamp中对应的字符的前后顺序相同;

将所述第一自然数组中的每个第一自然数减去设定自然数,并求绝对值,得到第二自然数组,所述第二自然数组是由多个第二自然数构成的数组;在所述第二自然数组中,所述第二自然数的前后顺序与所述第一自然数组中对应的第一自然数的前后顺序相同;其中,设定自然数小于或等于10;

在所述tempstring中查找所有与所述第二自然数组中每个所述第二自然数对应序位的临时字符,其中,所述序位是指每一个所述临时字符在所述tempstring中的排序位置;

根据所述临时字符与所述第二自然数的对应关系,将所述临时字符按照与所述第二自然数在所述第二自然数组中的顺序关系进行排序,得到password1;

所述服务端,用于接收所述客户端发送的所述随机字符、所述timestamp、所述host、所述username和所述password1;

通过所述随机字符、所述timestamp、所述host和所述username,按照预设的与所述物联网动态密码的生成方法相同的方法生成password2;

判断所述password2与所述password1是否相同;

若是,则判定为匹配成功,准许接入;

若否,则判定为匹配不成功,不准许接入。

本申请还提供一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述所述物联网动态密码的生成方法和/或所述物联网动态密码的验证方法中任一项所述方法的步骤。

本申请还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述所述物联网动态密码的生成方法和/或所述物联网动态密码的验证方法中任一项所述的方法的步骤。

本申请中提供的物联网动态密码的生成及验证方法、系统和计算机设备,通过在客户端产生随机值并获取当前时间戳timestamp,利用随机值、timestamp、host和username连接成第一字符串,将第一字符串进行排序得到initialstring,将initialstring通过hash算法加密得到tempstring,在timestamp中截取第一自然数组,将第一自然数组中每个自然数减去设定自然数并求绝对值,得第二自然数组,根据第二自然数组到tempstring中查找对应序位的临时字符而得到password1;通过这种方式生成动态密码,避免固定的密码明文容易被抓包劫取的风险。

附图说明

图1是本申请一实施例中物联网动态密码的生成方法步骤示意图;

图2是本申请一实施例中物联网动态密码的验证方法步骤示意图;

图3是本申请一实施例中物联网动态密码的生成及验证系统结构框图;

图4为本申请一实施例的计算机设备的结构示意框图。

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

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

参照图1,本申请一实施例中提供了一种物联网动态密码的生成方法,包括以下步骤:

步骤s1,客户端获取密码生成指令;

步骤s2,生成随机字符,并获取timestamp、host和username,其中,上述timestamp是当前时间戳,上述host为客户端地址,上述username是用户名;

步骤s3,将上述随机字符、上述timestamp、上述host和上述username按照第一预设规则连接起来,得到第一字符串;

步骤s4,将上述第一字符串按照第二预设规则进行排序,得到initialstring;

步骤s5,将上述initialstring通过hash加密算法进行加密,得到tempstring;

步骤s6,按照第三预设规则在上述timestamp中截取第一自然数组,上述第一自然数组是由多个第一自然数构成的数组,每个第一自然数均小于10;在上述第一自然数组中,各上述第一自然数的前后顺序与上述timestamp中对应的字符的前后顺序相同;

步骤s7,将上述第一自然数组中的每个第一自然数减去设定自然数,并求绝对值,得到第二自然数组,上述第二自然数组是由多个第二自然数构成的数组;在上述第二自然数组中,上述第二自然数的前后顺序与上述第一自然数组中对应的第一自然数的前后顺序相同;其中,设定自然数小于或等于10;

步骤s8,在上述tempstring中查找所有与上述第二自然数组中每个上述第二自然数对应序位的临时字符,其中,上述序位是指每一个上述临时字符在上述tempstring中的排序位置;

步骤s9,根据上述临时字符与上述第二自然数的对应关系,将上述临时字符按照与上述第二自然数在上述第二自然数组中的顺序关系进行排序,得到password1。

物联网系统的客户端在向服务端发送连接请求时,要生成接入的密码供服务端验证,从而来保证接入的安全性,客户端密码的生成过程具体如下:

如上述步骤s1所述,客户端获取密码生成指令,该密码生成指令可以是在客户端根据需要自动向服务端发出连接/接入请求时所产生,也可以是在人工操作下产生。

如上述步骤s2所述,客户端获取密码生成指令后,生成随机字符,并获取timestamp、host和username,其中,timestamp是当前时间戳,host是客户端地址,username是用户名。其中,随机字符是客户端在接收到密码生成指令后所产生的随机数值,客户端在获取随机字符的同时,获取当前时间戳timestamp,如当前时间戳1541482971;同时,获取客户端地址host和用户名username,客户端地址host可以通过客户端直接获取。若密码生成指令是客户端根据连接需要自动产生的,则用户名username是在客户端中预设的用户名,例如:能够自动连接服务端的智能客户端,在通过物联网连接服务端时,需要进行用户名的验证,这种情况下的用户名就是智能客户端中预设的用户名。若密码生成指令是客户端用户通过操作客户端产生的,则用户名username一般是用户输入的用户名。

如上述步骤s3所述,将随机字符、timestamp、host和username按照第一预设规则连接起来,得到第一字符串。其中,第一预设规则是将随机字符、timestamp、host和username按照一定的规则进行排序后连接。例如,若第一预设规则是将随机字符、timestamp、host和username按从前到后的顺序连接起来,其中,随机字符为aclientiddemostring,timestamp为1541482971,host为mqttdemoserverin,username为test,则,将随机字符、timestamp、host和username按顺序连接起来,得到字符串aclientiddemostring1541482971mqttdemoserverintest,该字符串就是第一字符串。

如上述步骤s4所述,将第一字符串按照第二预设规则进行排序,得到initialstring。第二预设规则可以是升序排列,并设定数字在前字母在后或字母在前数字在后,例如,将第一字符串aclientiddemostring1541482971mqttdemoserverintest按升序进行排列,并设定数字在前字母在后,排列后得到1112445789acdddeeeeeegiiiilmmmnnnooqrrrsssttttttv;第二预设规则也可以是降序排列,并设定数字在前字母在后或字母在前数字在后。将经过第二预设规则排序后所得的字符串作为initialstring(原始字符串)。

如上述步骤s5所述,将initialstring通过hash加密算法进行加密,得到tempstring(临时字符串)。hash加密算法即散列函数加密算法,常用的hash加密算法包括md5,sha-1,sha-2,sha-256,sha-x(系列)。通过hash加密算法对initialstring进行加密,将加密后得到的字符串作为临时字符串tempstring,例如,将上述initialstring(1112445789acdddeeeeeegiiiilmmmnnnooqrrrsssttttttv),通过md5方式的hash加密算法进行加密,得到临时字符串tempstring为3aa823ea0f069376a2e3622f70125297,记为tempstring=3aa823ea0f069376a2e3622f70125297。

如上述步骤s6所述,按照第三预设规则在timestamp中截取第一自然数组,第一自然数组是由多个第一自然数构成的数组。每个第一自然数均小于10,也即,在timestamp中截取的每一位自然数作为一个第一自然数,而不能将截取的多位自然数作为第一自然数,例如:第一自然数组可以是{1,5,4,1,4,8,2,9,7,1},而不能是{15,41,48,29,71}或{15,414,829,7,1}等情况。在第一自然数组中,各第一自然数的前后顺序与timestamp中对应的字符的前后顺序相同。其中,第三预设规则可以是从timestamp中的第一个字符开始,向后截取预设位数的字符。timestamp中的每位字符都是一个自然数。例如,timestamp为1541482971,若第三预设规则是从timestamp中的第一个字符开始向后截取十位字符,则恰好将timestamp包含的所有字符1541482971截取下来。第三预设规则也可以是从timestamp中的最后一个字符开始,向前截取预设位数的字符;或者截取timestamp中除上述两种情况之外的其他特定位置的字符。从timestamp中截取的字符都是自然数,均称为第一自然数,把由这些第一自然数构成的数组称为第一自然数组。在第一自然数组中,各第一自然数的前后顺序与这些第一自然数在timestamp中对应的字符的前后顺序相同,例如,在timestamp为1541482971,而第三预设规则是从timestamp中的第一个字符开始向后截取十位字符,则截取所获得的由十个相应第一自然数构成的第一自然数组为{1,5,4,1,4,8,2,9,7,1}。将第一自然数组记为array1,则array1={1,5,4,1,4,8,2,9,7,1},其中,array为“数组”的意思。

如上述步骤s7所述,将第一自然数组中的每个第一自然数减去设定自然数,并求绝对值,得到第二自然数组,上述第二自然数组是由多个第二自然数构成的数组。例如:设定自然数为10,第一自然数组为{1,5,4,1,4,8,2,9,7,1},则将第一自然数组中的每个第一自然数减去10,得到{-9,-5,-6,-9,-6,-2,-8,-1,-3,-9},并求绝对值后,得到的第二自然数组为{9,5,6,9,6,2,8,1,3,9}。将第二自然数组记为array2,则array2={9,5,6,9,6,2,8,1,3,9}。

在第二自然数组中,各第二自然数之间的前后顺序关系与第一自然数组中对应的第一自然数的前后顺序关系相同。其中,设定自然数小于或等于10,从而保证经过减法和求绝对值之后,一个小于10的第一自然数对应一个小于10的第二自然数,即第二自然数组中的第二自然数与第一自然数组中的第一自然数的个数相同,第一自然数和第二自然数均小于10。

如上述步骤s8所述,在tempstring中查找所有与第二自然数组中每个第二自然数对应序位的临时字符,其中,上述序位是指每一个上述临时字符在上述tempstring中的排序位置。上述临时字符在上述tempstring中的排序,一般是指从左向右的排序,也即,第一个序位的临时字符是tempstring中左端第一个字符,第二个序位的临时字符是tempstring中左端起向右的第二个字符。但在计算机语言中,是从第0位(即序位)开始计算的,也即在计算机处理的过程中,tempstring中左端起向右第一个字符对应第0序位,左端起向右第二个字符对应第1序位,左端起向右第三个字符对应第2序位,以此类推;例如:第二自然数组为{0,5,6,9,6,2,8,1,3,9},则在tempstring中查找对应的第0,第5,第6,第9,第6,第2,第8,第1,第3,和第9位对应的临时字符,如临时字符串tempstring=3aa823ea0f069376a2e3622f70125297,则对应的第0,第5,第6,第9,第6,第2,第8,第1,第3,和第9位字符分别为3,3,e,f,e,a,0,a,8,f。

如上述步骤s9所述,根据临时字符与第二自然数的对应关系,将临时字符按照与第二自然数在第二自然数组中的顺序关系进行排序,得到password1。例如:第二自然数组为{9,5,6,9,6,2,8,1,3,9},则在tempstring中查找对应的第9,第5,第6,第9,第6,第2,第8,第1,第3,和第9位对应的临时字符,如临时字符串tempstring=3aa823ea0f069376a2e3622f70125297,则对应的第9,第5,第6,第9,第6,第2,第8,第1,第3,和第9位字符分别为f,3,e,f,e,a,0,a,8,f,即按将tempstring中第9位字符排在第一个位置,将tempstring中第5位字符排在第二个位置……以此类推,得到结果字符串resultstring=f3efea0a8f,将该结果字符串作为密码,即password1=f3efea0a8f。客户端生成该密码后,就可以在请求接入服务端时,向服务端传输该密码password1,供服务端对密码验证后方可容许接入。

在一个实施例中,将上述随机字符、上述timestamp、上述host和上述username按照第一预设规则连接起来,得到第一字符串的步骤s3,包括:

步骤s301,将上述timestamp连接到所述随机字符后,得到clientid;

步骤s302,将上述clientid、所述host和所述username从前到后依次连接,得到第一字符串。

如上述步骤s301所述,将上述timestamp连接到所述随机字符后,得到clientid。其中,clientid是clientidentifier的简写,意为“客户端标识符”。将timestamp连接到所述随机字符后,得到clientid作为客户端标识符。例如:随机字符为aclientiddemostring,timestamp为1541482971,则将timestamp添加到所述随机字符后,得到clientid为aclientiddemostring1541482971,记为clientid=aclientiddemostring1541482971。

如上述步骤s302所述,将上述clientid、上述host和上述username从前到后依次连接,得到上述第一字符串。例如:clientid为aclientiddemostring1541482971,host为mqtt.demo.server.in,username为test,则将clientid、host和username从前到后依次连接,得到aclientiddemostring1541482971mqtt.demo.server.intest,记为clientid+host+username=aclientiddemostring1541482971mqtt.demo.server.intest,aclientiddemostring1541482971mqtt.demo.server.intest就是第一字符串。

在一个实施例中,将上述第一字符串按照第二预设规则进行排序,得到initialstring的步骤s4之前,还包括:

步骤s401,去除上述第一字符串中的标点符号。

在第一字符串包含标点符号的情况下,在将上述第一字符串按照第二预设规则进行排序,得到initialstring的步骤s4之前,如上述步骤s401所述,将上述第一字符串去除标点处理。例如:第一字符串为aclientiddemostring1541482971mqtt.demo.server.intest,将该第一字符串去除标点得到aclientiddemostring1541482971mqttdemoserverintest,从而便于步骤s4按照第二预设规则进行排序。

在一个实施例中,将上述第一字符串按照第二预设规则进行排序,得到initialstring的步骤s4,包括:

步骤s402,按照ascii标准的要求,将上述第一字符串的字符按照升序排列,获得上述initialstring。

将上述步骤s302所述,按照ascii(码)标准的要求,将所述第一字符串的字符按照升序排列,获得所述initialstring。其中,ascii(americanstandardcodeforinformationinterchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准iso/iec646。例如:上述第一字符串为aclientiddemostring1541482971mqttdemoserverintest,将第一字符串按照ascii标准的要求,并进行升序排列后得到1112445789acdddeeeeeegiiiilmmmnnnooqrrrsssttttttv,记为initialstring=1112445789acdddeeeeeegiiiilmmmnnnooqrrrsssttttttv。

在一个实施例中,上述按照第三预设规则在上述timestamp中截取第一自然数组的步骤s6,包括:

步骤s601,从上述timestamp的第一个字符开始,向后截取预设位数的字符,将截取所获得的字符组作为上述第一自然数组。

如上述步骤s601所述,从timestamp的第一个字符开始,向后截取预设位数的字符,将所截取的数组作为第一自然数组。该预设位数不限,例如,可以是十位,也可以根据timestamp所包含字符的总共位数,将timestamp中的所有字符截取。例如:若预设位数是十位,timestamp=1541482971,则从timestamp的第一个字符“1”(即左起“1”),向后(向右)截取十位,得到数组{1,5,4,1,4,8,2,9,7,1}作为第一自然数组,记为array1={1,5,4,1,4,8,2,9,7,1}。

本方案通过在客户端产生随机值并获取当前时间戳timestamp,利用随机值、timestamp、host和username连接成第一字符串,将第一字符串进行排序得到initialstring,将initialstring通过hash算法加密得到tempstring,在timestamp中截取第一自然数组,将第一自然数组中每个自然数减去设定自然数并求绝对值,得第二自然数组,根据第二自然数组到tempstring中查找对应序位的临时字符而得到password1;通过这种方式生成动态密码,避免固定的密码明文容易被抓包劫取的风险。

参照图2,本申请一实施例中还提供了一种物联网动态密码的验证方法,用于验证依据如上述任一实施例中物联网动态密码的生成方法所生成的密码,包括以下步骤:

步骤s01,服务端接收客户端发送的上述随机字符、上述timestamp、上述host、上述username和上述password1;

步骤s02,通过上述随机字符、上述timestamp、上述host和上述username,按照预设的与上述物联网动态密码的生成方法相同的方法生成password2;

步骤s03,判断上述password2与上述password1是否相同;

步骤s04,若是,则判定为匹配成功,准许接入;

步骤s05,若否,则判定为匹配不成功,不准许接入。

服务端在接收到客户端的连接请求后,首先要对其连接请求的密码进行识别验证,识别验证通过才允许接入。

如上述步骤s01所述,服务端接收客户端发送的上述随机字符、上述timestamp、上述host、上述username和上述password1,其中,服务端可以是系统的后台服务器。

如上述步骤s02和s03所述,通过上述随机字符、上述timestamp、上述host和上述username,按照预设的与上述物联网动态密码的生成方法相同的方法生成password2。例如:获取从客户端传来的随机字符为aclientiddemostring,timestamp为1541482971,host为mqtt.demo.server.in,username为test,则通过预设的与所述生成方法相同的方法生成password2应该满足,password2=password1=f3efea0a8f。在上述步骤s03中,判断password2是否与password1相同。若相同,即password2=password1,说明客户端是按照预设的物联网动态密码的生成方法所生成的密码;若不相同,即password2≠password1,说明客户端不是按照预设的物联网动态密码的生成方法所生成的密码,则很有可能是编造出来的密码。

如上述步骤s04和s05所述,若password2与password1相同,即password2=password1,说明客户端是按照预设的物联网动态密码的生成方法所生成的密码,则判定为匹配成功,准许客户端的接入。若password2与password1不相同,即password2≠password1,说明客户端不是按照预设的物联网动态密码的生成方法所生成的密码,则判定为匹配不成功,不准许接入,从而保证接入的安全性。

在一个实施例中,判断上述password2与上述password1是否相同的步骤s03之前,还包括:

步骤s031,获取servertime,其中,所述servertime是服务端获取的当前时间;

步骤s032,计算所述servertime与所述timestamp的时间差值;

步骤s033,判断所述时间差值是否大于设定阈值;

步骤s034,若是,则不不准许接入;

步骤s035,若否,则生成执行“判断所述password2与所述password1是否相同”的命令。

在实际中,为进一步增加认证的安全性,不仅要检查前端传来的密码是否为由预设的生成方法所生成,还要检查密码的生成时间与连接验证请求的时间间隔是否在合理的时间内,如果时间间隔不合理,就说明存在问题。

在判断上述password2与上述password1是否相同的步骤s03之前,服务端获取的当前时间servertime,基本可以认为后端的当前时间servertime就是客户端连接验证请求的时间和传来密码的时间。如上述步骤s031和s032所述,服务端获取当前时间servertime,然后,计算上述servertime与timestamp的差值v,v=servertime-timestamp。其中,差值v即时间差值。如上述步骤s033所述,判断差值v是否大于预设阈值,其中,预设阈值是根据前端加密所需时间、密码传输时间等计算机处理所需要的合理时间而定。如上述步骤s034所述,如果差值v大于设定预设阈值,例如30s,则认为从前端密码生成到后端接到连接请求的时间超过了合理的计算机处理时间,说明密码有可能是很早之前产生的;也有可能是泄露了,则直接拒绝前端接入,从而保证接入的安全性。如上述步骤s035所述,如果差值v不大于设定预设阈值,说明密码的生成时间与连接验证请求的时间间隔是在合理的时间内,可以接受,则生成执行“判断所述password2与所述password1是否相同”的命令,从而进入s03的进一步验证步骤。

在一个实施例中,上述判断所述password2与所述password1是否相同的步骤s03之前,还包括:

步骤s036,获取所述客户端历次接入请求所传来的时间戳记录;

步骤s037,在所述时间戳记录中,查找是否存在与所述timestamp相同的时间戳;

步骤s038,若是,则不不准许接入;

步骤s039,若否,则生成执行“判断所述password2与所述password1是否相同”的命令。

为进一步增加接入验证的安全性,还可以通过判断以往历次请求接入所传来的时间戳中是否有与当前请求接入所传来的timestamp相同的时间戳,如果有就可以断定是有问题的,因为不可能在不同的时间内产生相同的时间戳,极有可能是使用了以前客户端生成的密码或者编造的密码来骗取接入。具体步骤如下:

如步骤s036和s037所述,先获取/调取服务端所储存的客户端历次接入请求所传来的时间戳记录,在客户端历次接入请求所传来的时间戳记录中,查找是否存在与本次接入请求所传来的timestamp相同的时间戳。如上述步骤s038所述,如果在历次接入请求所传来的时间戳记录中有任一个时间戳与当前来接传来的timestamp相同,则说明生成该密码的时间戳有问题,可能是编造或以前已经使用过的密码,则拒绝前端接入,从而从而保证接入的安全性。如上述步骤s039所述,如果在历次接入请求所传来的时间戳记录中没有与当前来接传来的timestamp相同的时间戳,则说明生成该密码的timestamp是新的时间戳,没有问题,则生成执行“判断所述password2与所述password1是否相同”的命令,从而进入s03的进一步验证步骤。

在一个实施例中,上述若是,则判定为匹配成功,准许接入的步骤步骤s04之后,还包括:

步骤s041,记录上述timestamp。

如上述步骤s041所述,记录当前连接请求的timestamp,为以后判断是否有携带重复的时间戳的连接请求提供参考和判断依据。

参照图3,本申请一实施例中还提供了一种物联网动态密码的生成及认证系统,包括客户端10和服务端20;

上述客户端10,用于获取密码生成指令;

生成随机字符,并获取timestamp、host和username,其中,所述timestamp是当前时间戳,所述host是客户端地址,所述username是用户名;

将所述随机字符、所述timestamp、所述host和所述username按照第一预设规则连接起来,得到第一字符串;

将所述第一字符串按照第二预设规则进行排序,得到initialstring;

将所述initialstring通过hash加密算法进行加密,得到tempstring;

按照第三预设规则在所述timestamp中截取第一自然数组,所述第一自然数组是由多个第一自然数构成的数组,每个所述第一自然数均小于10;在所述第一自然数组中,各所述第一自然数的前后顺序与所述timestamp中对应的字符的前后顺序相同;

将所述第一自然数组中的每个第一自然数减去设定自然数,并求绝对值,得到第二自然数组,所述第二自然数组是由多个第二自然数构成的数组;在所述第二自然数组中,所述第二自然数的前后顺序与所述第一自然数组中对应的第一自然数的前后顺序相同;其中,所述设定自然数小于或等于10;

在所述tempstring中查找所有与所述第二自然数组中每个所述第二自然数对应序位的临时字符,其中,所述序位是指每一个上述临时字符在上述tempstring中的排序位置;

根据所述临时字符与所述第二自然数的对应关系,将所述临时字符按照与所述第二自然数在所述第二自然数组中的顺序关系进行排序,得到password1;

上述服务端20,用于接收所述客户端发送的所述随机字符、所述timestamp、所述host、所述username和所述password1;

通过所述随机字符、所述timestamp、所述host和所述username,按照预设的与所述物联网动态密码的生成方法相同的方法生成password2;

判断所述password2与所述password1是否相同;

若是,则判定为匹配成功,准许接入;

若否,则判定为匹配不成功,不准许接入。

物联网系统的客户端10在向服务端发送连接请求时,要生成接入的密码供服务端验证,从而来保证接入的安全性,客户端10密码的生成过程具体如下:

如上述客户端10所述的,客户端10获取密码生成指令,该密码生成指令可以是在客户端10根据需要自动向服务端20发出连接/接入请求时所产生,也可以是在人工操作下产生。

客户端10获取密码生成指令后,生成随机字符,并获取timestamp、host和username,其中,timestamp是当前时间戳,host是客户端地址,username是用户名。其中,随机字符是客户端在接收到密码生成指令后所产生的随机数值,客户端10在获取随机字符的同时,获取当前时间戳timestamp,如当前时间戳1541482971;同时,获取客户端地址host和用户名username,客户端地址host可以通过客户端直接获取。若密码生成指令是客户端10根据连接需要自动产生的,则用户名username是在客户端10中预设的用户名,例如:能够自动连接服务端20的智能客户端,在通过物联网连接服务端时,需要进行用户名的验证,这种情况下的用户名就是智能客户端中预设的用户名。若密码生成指令是客户端用户通过操作客户端产生的,则用户名username一般是用户输入的用户名。

客户端10将随机字符、timestamp、host和username按照第一预设规则连接起来,得到第一字符串。其中,第一预设规则是将随机字符、timestamp、host和username按照一定的规则进行排序后连接。例如,若第一预设规则是将随机字符、timestamp、host和username按从前到后的顺序连接起来,其中,随机字符为aclientiddemostring,timestamp为1541482971,host为mqttdemoserverin,username为test,则,将随机字符、timestamp、host和username按顺序连接起来,得到字符串aclientiddemostring1541482971mqttdemoserverintest,该字符串就是第一字符串。

客户端10将第一字符串按照第二预设规则进行排序,得到initialstring。第二预设规则可以是升序排列,并设定数字在前字母在后或字母在前数字在后,例如,将第一字符串aclientiddemostring1541482971mqttdemoserverintest按升序进行排列,并设定数字在前字母在后,排列后得到1112445789acdddeeeeeegiiiilmmmnnnooqrrrsssttttttv;第二预设规则也可以是降序排列,并设定数字在前字母在后或字母在前数字在后。将经过第二预设规则排序后所得的字符串作为initialstring(原始字符串)。

客户端10将initialstring通过hash加密算法进行加密,得到tempstring(临时字符串)。hash加密算法即散列函数加密算法,常用的hash加密算法包括md5,sha-1,sha-2,sha-256,sha-x(系列)。通过hash加密算法对initialstring进行加密,将加密后得到的字符串作为临时字符串tempstring,例如,将上述initialstring(1112445789acdddeeeeeegiiiilmmmnnnooqrrrsssttttttv),通过md5方式的hash加密算法进行加密,得到临时字符串tempstring为3aa823ea0f069376a2e3622f70125297,记为tempstring=3aa823ea0f069376a2e3622f70125297。

客户端10按照第三预设规则在timestamp中截取第一自然数组,第一自然数组是由多个第一自然数构成的数组。每个第一自然数均小于10,也即,在timestamp中截取的每一位自然数作为一个第一自然数,而不能将截取的多位自然数作为第一自然数,例如:第一自然数组可以是{1,5,4,1,4,8,2,9,7,1},而不能是{15,41,48,29,71}或{15,414,829,7,1}等情况。在第一自然数组中,各第一自然数的前后顺序与timestamp中对应的字符的前后顺序相同。其中,第三预设规则可以是从timestamp中的第一个字符开始,向后截取预设位数的字符。timestamp中的每位字符都是一个自然数。例如,timestamp为1541482971,若第三预设规则是从timestamp中的第一个字符开始向后截取十位字符,则恰好将timestamp包含的所有字符1541482971截取下来。第三预设规则也可以是从timestamp中的最后一个字符开始,向前截取预设位数的字符;或者截取timestamp中除上述两种情况之外的其他特定位置的字符。从timestamp中截取的字符都是自然数,均称为第一自然数,把由这些第一自然数构成的数组称为第一自然数组。在第一自然数组中,各第一自然数的前后顺序与这些第一自然数在timestamp中对应的字符的前后顺序相同,例如,在timestamp为1541482971,而第三预设规则是从timestamp中的第一个字符开始向后截取十位字符,则截取所获得的由十个相应第一自然数构成的第一自然数组为{1,5,4,1,4,8,2,9,7,1}。将第一自然数组记为array1,则array1={1,5,4,1,4,8,2,9,7,1},其中,array为“数组”的意思。

客户端10将第一自然数组中的每个第一自然数减去设定自然数,并求绝对值,得到第二自然数组,上述第二自然数组是由多个第二自然数构成的数组。例如:设定自然数为10,第一自然数组为{1,5,4,1,4,8,2,9,7,1},则将第一自然数组中的每个第一自然数减去10,得到{-9,-5,-6,-9,-6,-2,-8,-1,-3,-9},并求绝对值后,得到的第二自然数组为{9,5,6,9,6,2,8,1,3,9}。将第二自然数组记为array2,则array2={9,5,6,9,6,2,8,1,3,9}。

在第二自然数组中,各第二自然数之间的前后顺序关系与第一自然数组中对应的第一自然数的前后顺序关系相同。其中,设定自然数小于或等于10,从而保证经过减法和求绝对值之后,一个小于10的第一自然数对应一个小于10的第二自然数,即第二自然数组中的第二自然数与第一自然数组中的第一自然数的个数相同,第一自然数和第二自然数均小于10。

客户端10在tempstring中查找所有与第二自然数组中每个第二自然数对应序位的临时字符,其中,上述序位是指每一个上述临时字符在上述tempstring中的排序位置。上述临时字符在上述tempstring中的排序,一般是指从左向右的排序,也即,第一个序位的临时字符是tempstring中左端第一个字符,第二个序位的临时字符是tempstring中左端起向右的第二个字符。但在计算机语言中,是从第0位(即序位)开始计算的,也即在计算机处理的过程中,tempstring中左端起向右第一个字符对应第0序位,左端起向右第二个字符对应第1序位,左端起向右第三个字符对应第2序位,以此类推;例如:第二自然数组为{0,5,6,9,6,2,8,1,3,9},则在tempstring中查找对应的第0,第5,第6,第9,第6,第2,第8,第1,第3,和第9位对应的临时字符,如临时字符串tempstring=3aa823ea0f069376a2e3622f70125297,则对应的第0,第5,第6,第9,第6,第2,第8,第1,第3,和第9位字符分别为3,3,e,f,e,a,0,a,8,f。

客户端10根据临时字符与第二自然数的对应关系,将临时字符按照与第二自然数在第二自然数组中的顺序关系进行排序,得到password1。例如:第二自然数组为{9,5,6,9,6,2,8,1,3,9},则在tempstring中查找对应的第9,第5,第6,第9,第6,第2,第8,第1,第3,和第9位对应的临时字符,如临时字符串tempstring=3aa823ea0f069376a2e3622f70125297,则对应的第9,第5,第6,第9,第6,第2,第8,第1,第3,和第9位字符分别为f,3,e,f,e,a,0,a,8,f,即按将tempstring中第9位字符排在第一个位置,将tempstring中第5位字符排在第二个位置……以此类推,得到结果字符串resultstring=f3efea0a8f,将该结果字符串作为密码,即password1=f3efea0a8f。客户端生成该密码后,就可以在请求接入服务端时,向服务端传输该密码password1,供服务端对密码验证后方可容许接入。

服务端20在接收到客户端10的连接请求后,首先要对其连接请求的密码进行识别验证,识别验证通过才允许接入。

服务端20接收客户端10发送的上述随机字符、上述timestamp、上述host、上述username和上述password1,其中,服务端20可以是系统的后台服务器。

服务端20通过上述随机字符、上述timestamp、上述host和上述username,按照预设的与上述物联网动态密码的生成方法相同的方法生成password2。例如:服务端20获取从客户端10传来的随机字符为aclientiddemostring,timestamp为1541482971,host为mqtt.demo.server.in,username为test,则通过预设的与所述生成方法相同的方法生成password2应该满足,password2=password1=f3efea0a8f。判断password2是否与password1相同。若相同,即password2=password1,说明客户端10是按照预设的物联网动态密码的生成方法所生成的密码;若不相同,即password2≠password1,说明客户端10不是按照预设的物联网动态密码的生成方法所生成的密码,则很有可能是编造出来的密码。

若password2与password1相同,即password2=password1,说明客户端10是按照预设的物联网动态密码的生成方法所生成的密码,则判定为匹配成功,准许客户端10的接入。若password2与password1不相同,即password2≠password1,说明客户端10不是按照预设的物联网动态密码的生成方法所生成的密码,则判定为匹配不成功,不准许接入,从而保证接入的安全性。

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

上述处理器执行上述物联网动态密码的生成方法的步骤:

客户端获取密码生成指令;

生成随机字符,并获取timestamp、host和username,其中,上述timestamp是当前时间戳,上述host为客户端地址,上述username是用户名;

将上述随机字符、上述timestamp、上述host和上述username按照第一预设规则连接起来,得到第一字符串;

将上述第一字符串按照第二预设规则进行排序,得到initialstring;

将上述initialstring通过hash加密算法进行加密,得到tempstring;

按照第三预设规则在上述timestamp中截取第一自然数组,上述第一自然数组是由多个第一自然数构成的数组,每个上述第一自然数均小于10;在上述第一自然数组中,各上述第一自然数的前后顺序与上述timestamp中对应的字符的前后顺序相同;

将上述第一自然数组中的每个第一自然数减去设定自然数,并求绝对值,得到第二自然数组,上述第二自然数组是由多个第二自然数构成的数组;在上述第二自然数组中,上述第二自然数的前后顺序与上述第一自然数组中对应的第一自然数的前后顺序相同;其中,设定自然数小于或等于10;

在上述tempstring中查找所有与上述第二自然数组中每个上述第二自然数对应序位的临时字符,其中,上述序位是指每一个上述临时字符在上述tempstring中的排序位置;

根据上述临时字符与上述第二自然数的对应关系,将上述临时字符按照与上述第二自然数在上述第二自然数组中的顺序关系进行排序,得到password1。

在一个实施例中,上述将上述随机字符、上述timestamp、上述host和上述username按照第一预设规则连接起来,得到第一字符串的步骤,包括:

将上述timestamp连接到上述随机字符后,得到clientid;

将上述clientid、上述host和上述username从前到后依次连接,得到上述第一字符串。

在一个实施例中,上述将上述第一字符串按照第二预设规则进行排序,得到initialstring的步骤之前,还包括:

去除上述第一字符串中的标点符号。

在一个实施例中,上述按照第三预设规则在上述timestamp中截取第一自然数组的步骤,包括:

从上述timestamp的第一个字符开始,向后截取预设位数的字符,将截取所获得的字符组作为上述第一自然数组。

上述处理器执行上述物联网动态密码的验证方法的步骤:

服务端接收客户端发送的上述随机字符、上述timestamp、上述host、上述username和上述password1;

通过上述随机字符、上述timestamp、上述host和上述username,按照预设的与上述物联网动态密码的生成方法相同的方法生成password2;

判断上述password2与上述password1是否相同;

若是,则判定为匹配成功,准许接入;

若否,则判定为匹配不成功,不准许接入。

在一个实施例中,上述判断上述password2与上述password1是否相同的步骤之前,还包括:

获取servertime,其中,上述servertime是服务端获取的当前时间;

计算上述servertime与上述timestamp的时间差值;

判断上述时间差值是否大于设定阈值;

若是,则不不准许接入;

若否,则生成执行“判断上述password2与上述password1是否相同”的命令。

在一个实施例中,上述判断上述password2与上述password1是否相同的步骤之前,还包括:

获取上述客户端历次接入请求所传来的时间戳记录;

在上述时间戳记录中,查找是否存在与上述timestamp相同的时间戳;

若是,则不不准许接入;

若否,则生成执行“判断上述password2与上述password1是否相同”的命令。

本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种物联网动态密码的生成和/或认证方法。

上述处理器执行上述物联网动态密码的生成方法的步骤:

客户端获取密码生成指令;

生成随机字符,并获取timestamp、host和username,其中,上述timestamp是当前时间戳,上述host为客户端地址,上述username是用户名;

将上述随机字符、上述timestamp、上述host和上述username按照第一预设规则连接起来,得到第一字符串;

将上述第一字符串按照第二预设规则进行排序,得到initialstring;

将上述initialstring通过hash加密算法进行加密,得到tempstring;

按照第三预设规则在上述timestamp中截取第一自然数组,上述第一自然数组是由多个第一自然数构成的数组,每个上述第一自然数均小于10;在上述第一自然数组中,各上述第一自然数的前后顺序与上述timestamp中对应的字符的前后顺序相同;

将上述第一自然数组中的每个第一自然数减去设定自然数,并求绝对值,得到第二自然数组,上述第二自然数组是由多个第二自然数构成的数组;在上述第二自然数组中,上述第二自然数的前后顺序与上述第一自然数组中对应的第一自然数的前后顺序相同;其中,设定自然数小于或等于10;

在上述tempstring中查找所有与上述第二自然数组中每个上述第二自然数对应序位的临时字符,其中,上述序位是指每一个上述临时字符在上述tempstring中的排序位置;

根据上述临时字符与上述第二自然数的对应关系,将上述临时字符按照与上述第二自然数在上述第二自然数组中的顺序关系进行排序,得到password1。

在一个实施例中,上述将上述随机字符、上述timestamp、上述host和上述username按照第一预设规则连接起来,得到第一字符串的步骤,包括:

将上述timestamp连接到上述随机字符后,得到clientid;

将上述clientid、上述host和上述username从前到后依次连接,得到上述第一字符串。

在一个实施例中,上述将上述第一字符串按照第二预设规则进行排序,得到initialstring的步骤之前,还包括:

去除上述第一字符串中的标点符号。

在一个实施例中,上述按照第三预设规则在上述timestamp中截取第一自然数组的步骤,包括:

从上述timestamp的第一个字符开始,向后截取预设位数的字符,将截取所获得的字符组作为上述第一自然数组。

上述处理器执行上述物联网动态密码的验证方法的步骤:

服务端接收客户端发送的上述随机字符、上述timestamp、上述host、上述username和上述password1;

通过上述随机字符、上述timestamp、上述host和上述username,按照预设的与上述物联网动态密码的生成方法相同的方法生成password2;

判断上述password2与上述password1是否相同;

若是,则判定为匹配成功,准许接入;

若否,则判定为匹配不成功,不准许接入。

在一个实施例中,上述判断上述password2与上述password1是否相同的步骤之前,还包括:

获取servertime,其中,上述servertime是服务端获取的当前时间;

计算上述servertime与上述timestamp的时间差值;

判断上述时间差值是否大于设定阈值;

若是,则不不准许接入;

若否,则生成执行“判断上述password2与上述password1是否相同”的命令。

在一个实施例中,上述判断上述password2与上述password1是否相同的步骤之前,还包括:

获取上述客户端历次接入请求所传来的时间戳记录;

在上述时间戳记录中,查找是否存在与上述timestamp相同的时间戳;

若是,则不不准许接入;

若否,则生成执行“判断上述password2与上述password1是否相同”的命令。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储与一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(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