一种社交客户端通讯录动态保护方法及装置与流程

文档序号:18523717发布日期:2019-08-24 10:02阅读:241来源:国知局
一种社交客户端通讯录动态保护方法及装置与流程

本发明涉及网络安全技术领域,具体而言,涉及一种社交客户端通讯录动态保护方法及装置。



背景技术:

目前的社交客户端均会含有通讯录好友信息,而这些通信录好友信息涉及到了用户的隐私,一些非法病毒或者黑客通常都会截获拦截用户的通讯录,从而可以做一些非法的事情,进而获取利益。黑客通过逆向破解分析出如何获取被攻击设备上的应用程序的通讯录信息后,可以通过编写一个病毒程序,通过不法手段扩散到其他的用户设备上,就可以获取其他设备的通讯录信息。在病毒程序不需要更新的情况下,病毒程序不仅可以获取客户端老版本的通讯录信息,而且还能获取新版本的通讯录信息。

现有技术提供的方案中的防范规则通常是对服务器与客户端之间的网络协议更换加密算法,从而阻止病毒程序或者黑客获取通讯录信息。然而,一些更高级的病毒是通过通讯录的控件信息来获取名称,从而绕过了网络协议的加解密算法,从而不管客户端如何更新都可以获取到对应的通讯录信息。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种社交客户端通讯录动态保护方法及装置,通过多控件实时显示通讯录数据实现动态加密,避免了病毒程序在版本迭代后也能获取通讯录数据。

第一方面,本申请通过一实施例提供如下技术方案:

一种社交客户端通讯录动态保护方法,包括:

接收客户端对通讯录数据的更新请求;基于所述更新请求,在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据,并为每个所述通讯录数据生成唯一的控件编号;分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥;基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据;将所述最终加密数据发送给所述客户端,以使所述客户端在需要进行通讯录数据显示时,对所述最终加密数据进行解密并基于每个所述控件编号创建所述控件。

优选地,所述更新请求携带有所述客户端的用户id与操作指令,所述在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据之前,还包括:在预设的数据库中查找与所述用户id对应的通讯录数据;基于所述操作指令,对所述用户id对应的通讯录数据进行操作;其中,所述操作指令包括以下任一种或多种:对指定通讯录数据进行删除;对指定通讯录数据进行修改;添加一条新的通讯录数据。

优选地,所述更新请求携带有所述客户端的版本号,所述为每个所述通讯录数据生成唯一的控件编号,包括:根据所述客户端的版本号与所述通讯录数据的总数量,生成每个所述控件的控件编号。

优选地,所述分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥,包括:采用随机算法对每个所述通讯录数据进行加密,分别获得每个所述通讯录数据加密后的加密信息与加密密钥;其中,所述进行加密包括以下任意一种方式或多种方式:对所述通讯录数据进行位移运算,对所述通讯录数据进行异或运算,对所述通讯录数据进行加法运算以及对所述通讯录数据进行减法运算。

优选地,所述更新请求携带有所述客户端的用户id以及所述客户端的设备id,所述分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥,包括:根据每个所述通讯录数据的所述控件编号,分别确定每个所述控件编号对应的控件坐标;基于每个所述控件坐标,获得每个所述控件坐标的坐标密钥;根据所述用户id和所述设备id,获得所述客户端的用户信息密钥;根据所述通讯录数据的总个数,所述用户信息密钥,以及每个所述坐标密钥,分别获得每个所述通讯录数据的加密密钥;基于每个所述通讯录数据的加密密钥,采用tea加密算法分别对每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息。

优选地,所述根据所述通讯录数据的总个数,所述用户信息密钥,以及每个所述坐标密钥,分别获得每个所述通讯录数据的加密密钥,包括:分别向当前所述控件坐标的密钥以及所述用户信息密钥分配权重,分别获得第一权重和第二权重;其中,所述第一权重为当前所述控件坐标的密钥对应的权重,所述第二权重为所述用户信息密钥对应的权重,所述第一权重小于所述第二权重;基于所述第一权重,在当前所述控件坐标的坐标密钥中取出第一密钥字符串;基于所述第二权重,在所述用户信息密钥中取出第二密钥字符串;将所述第一密钥字符串与所述第二密钥字符串拼接,获得当前所述通讯录数据的加密密钥。

优选地,所述基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据,包括:根据预设的控件类型生成控件;其中,所述控件包括属性部分和解密部分;将每个所述通讯录数据对应的所述控件编号分别匹配给多个控件,其中每个控件对应一个所述控件编号;将每个所述控件编号对应的所述加密信息与所述加密密钥,分别保存至每个所述控件的属性部分;将所述控件的总数量与所有所述控件进行加密,获得所述最终加密数据。

第二方面,基于同一发明构思,本申请通过一实施例提供如下技术方案:

一种社交客户端通讯录动态保护装置,包括:

接收模块,用于接收客户端对通讯录数据的更新请求;控件编号生成模块,用于基于所述更新请求,在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据,并为每个所述通讯录数据生成唯一的控件编号;加密模块,用于分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥;控件生成模块,用于基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据;发送模块,用于将所述最终加密数据发送给所述客户端,以使所述客户端在需要进行通讯录数据显示时,对所述最终加密数据进行解密并基于每个所述控件编号创建所述控件。

第三方面,基于同一发明构思,本申请通过一实施例提供如下技术方案:

一种社交客户端通讯录动态保护装置,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:

接收客户端对通讯录数据的更新请求;基于所述更新请求,在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据,并为每个所述通讯录数据生成唯一的控件编号;分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥;基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据;将所述最终加密数据发送给所述客户端,以使所述客户端在需要进行通讯录数据显示时,对所述最终加密数据进行解密并基于每个所述控件编号创建所述控件。

第四方面,基于同一发明构思,本申请通过一实施例提供如下技术方案:

一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

接收客户端对通讯录数据的更新请求;基于所述更新请求,在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据,并为每个所述通讯录数据生成唯一的控件编号;分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥;基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据;将所述最终加密数据发送给所述客户端,以使所述客户端在需要进行通讯录数据显示时,对所述最终加密数据进行解密并基于每个所述控件编号创建所述控件。

本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:

本发明提供的一种社交客户端通讯录动态保护方法及装置,在接收客户端对通讯录数据的更新请求之后,基于更新请求生成通讯录数据的控件,保证了控件的生成不在客户端进行;然后分别对每个通讯录数据进行加密,避免了病毒程序的一次性破解;由于在服务器上生成每个通讯录数据的控件,只有在客户端接收到最终加密数据之后,客户端才会根据最终加密数据进行解密并基于每个控件编号创建控件,这样在客户端上接收到的数据就会始终以加密的形式保存,仅仅是在显示的时候才创建控件进行显示,由于每条通讯录数据都对应一控件,在进行通讯录数据显示时也会采用对应的多个不同的控件进行显示,避免了病毒程序同时获取到所有的通讯录数据。进一步的,由于控件的生成是在服务器进行的,并不是在客户端本地编写保存好的,当进行版本更新后就需要重新由服务器生成控件并下发,保证了动态性,避免了病毒程序在版本迭代后也能获取通讯录数据。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明第一实施例提供的一种社交客户端通讯录动态保护方法的流程图;

图2为本发明第二实施例提供的一种社交客户端通讯录动态保护装置的功能模块图;

图3为本发明第三实施例提供的一种社交客户端通讯录动态保护装置的结构框图;

图4为本发明第四实施例提供的一种计算机可读存储介质的功能模块图。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

第一实施例

请参照图1,在本实施例中提供一种社交客户端通讯录动态保护方法,该方法可应用于与客户端进行通信的服务器,具体的,该方法包括:

步骤s10:接收客户端对通讯录数据的更新请求;

步骤s20:基于所述更新请求,在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据,并为每个所述通讯录数据生成唯一的控件编号;

步骤s30:分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥;

步骤s40:基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据;

步骤s50:将所述最终加密数据发送给所述客户端,以使所述客户端在需要进行通讯录数据显示时,对所述最终加密数据进行解密并基于每个所述控件编号创建所述控件。

在本实施例中,在接收客户端对通讯录数据的更新请求之后,基于更新请求生成通讯录数据的控件,保证了控件的生成不在客户端进行;然后分别对每个通讯录数据进行加密,避免了病毒程序的一次性破解;由于在服务器上生成每个通讯录数据的控件,只有在客户端接收到最终加密数据之后,客户端才会根据最终加密数据进行解密并基于每个控件编号创建控件,这样在客户端上接收到的数据就会始终以加密的形式保存,仅仅是在显示的时候才创建控件进行显示,由于每条通讯录数据都对应一控件,在进行通讯录数据显示时也会采用对应的多个不同的控件进行显示,避免了病毒程序同时获取到所有的通讯录数据。

进一步的,由于控件的生成是在服务器进行的,并不是在客户端本地编写保存好的,当进行版本更新后就需要重新由服务器生成控件并下发,避免了病毒程序在版本迭代后也能获取通讯录数据。

步骤s10:接收客户端对通讯录数据的更新请求。

在步骤s10中,更新请求为客户端向服务器发送的请求,在该更新请求中可携带客户端的用户id、设备id以及操作指令,其中操作指令为对预设的数据库进行操作的指令;其中,操作指令包括以下任一种或多种:对指定通讯录数据进行删除;对指定通讯录数据进行修改;添加一条新的通讯录数据。该更新请求还包括下载请求,用于请求下载客户端的用户id所对应的通信录数据。

需要说明的是,若更新请求中携带有操作指令,那么在步骤s20之前,还包括:在预设的数据库中查找与所述用户id对应的通讯录数据;基于所述操作指令,对所述用户id对应的通讯录数据进行操作。操作完成后执行步骤s20。

步骤s20:基于所述更新请求,在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据,并为每个所述通讯录数据生成唯一的控件编号。

在步骤s20中,预设的数据库用于保存不同用户id的通讯录数据。生成控件编号可为直接进行随机编号,也可以随机生成首个控件编号,然后依次顺序编号,不作限制。

本实施例中,步骤s20的以具体实施方式包括:根据所述客户端的版本号与所述通讯录数据的总数量,生成每个所述控件的控件编号。具体例如:

首先,生成一个随机数据,然后使用随机数据对控件的总量(控件的总量与通讯录数据的总数量相同)求余数,从而得到一个编号。将客户端的版本号与改编号拼接则得到最终的控件编号,如客户端版本号为0001,随机数据求余数得到的编号为0001,则最终的控件编号为00010001。然后,可将该编号为起始编号依次对每个通讯录数据进行分配控件编号。保证了控件编号的随机性,避免了某一通讯录数据始终对应一特定的编号,提高安全性。

步骤s30:分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥。

在步骤s30中,加密信息为通讯录数据加密后的数据,加密密钥用于对加密信息进行解密。在本实施例中提供如下的加密方式:

1、采用随机算法进行加密。

具体的,包括:

采用随机算法对每个所述通讯录数据进行加密,分别获得每个所述通讯录数据加密后的加密信息与加密密钥;其中,所述进行加密包括以下任意一种方式或多种方式:对所述通讯录数据进行位移运算,对所述通讯录数据进行异或运算,对所述通讯录数据进行加法运算以及对所述通讯录数据进行减法运算。

通过随机算法的加密可使得每个通讯录数据的加密具体算法存在差异,提高了破解难度。例如,加密过程可为:

voidencrypt00010001(char*data){

for(inti=0;i<sizeof(data);i++){

*(data+i)^=0x7a;//异或运算;

*(data+i)^=0x34;//异或运算;

*(data+i)+=0x1;//加法运算;

*(data+i)^=0x15;//异或运算;

*(data+i)=(*(data+i)<<3)|(*(data+i)>>(8-3));//左移位3位,右移位3位;

*(data+i)+=0x34;//加法运算;

*(data+i)=(*(data+i)>>4)|(*(data+i)<<(8-4));//右移位4位,左移位4位;

};表示对控件编号为00010001中的通讯录数据data中的每个字符进行加密,其中,0x7a、0x34、0x1、0x15、0x34为对应的密钥。

2、基于每个控件的控件坐标对对应的通讯录数据进行加密。

每个控件的位置在客户端的整个通讯录中的位置是固定的,服务器在下发控件时就可知道每个控件在整个通讯录的相对位置。那么则可以依据相对位置的控件坐标来进行参与计算,从而使得加密算法更为复杂。整个通讯录的通讯录数据则可以依据每个控件的相对坐标来进行二次加密。使得每个通讯录只有在当前位置其解密的联系人信息才是正确的。

具体的,包括:

步骤s311:根据每个所述通讯录数据的所述控件编号,分别确定每个所述控件编号对应的控件坐标。

步骤s312:基于每个所述控件坐标,获得每个所述控件坐标的坐标密钥;

步骤s313:根据所述用户id和所述设备id,获得所述客户端的用户信息密钥;

步骤s314:根据所述通讯录数据的总个数,所述用户信息密钥,以及每个所述坐标密钥,分别获得每个所述通讯录数据的加密密钥;通过用户信息密钥,以及每个所述坐标密钥实现了二次加密,提高了安全性。

在步骤s314中,具体可采用通讯录数据的总个数,用户信息密钥,以及每个坐标密钥计算对应的每个通讯录数据加密密钥。计算的方式不作限制,例如:对三者之间进行加法、减法、拼接等方式计算加密密钥。具体的,还包括如下获取方式:

分别向当前所述控件坐标的密钥以及所述用户信息密钥分配权重,分别获得第一权重和第二权重;其中,所述第一权重为当前所述控件坐标的密钥对应的权重,所述第二权重为所述用户信息密钥对应的权重,所述第一权重小于所述第二权重;

基于所述第一权重,在当前所述控件坐标的坐标密钥中取出第一密钥字符串;

基于所述第二权重,在所述用户信息密钥中取出第二密钥字符串;

将所述第一密钥字符串与所述第二密钥字符串拼接,获得当前所述通讯录数据的加密密钥。

步骤s315:基于每个所述通讯录数据的加密密钥,采用tea加密算法分别对每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息。

例如:在服务器端,可以知道当前这个通讯录数据的控件最终在整个通讯录的坐标位置,例如第一个通讯录数据的位置坐标是(10,0);那么第二个通讯录数据的位置坐标则是这个控件的高度,从而得到位置坐标为(10,20)。依次类推第三个通讯录数据的位置坐标为(10,40)。

同时,本例子中还会基于用户id、设备id来取部分权重,基于位置坐标来取另一部分权重;从而使得通讯录数据的加密会依赖于用户id、设备id以及控件的位置坐标来做加密,从而保障了信息只有对应的用户和设备并在正确的位置坐标显示才能正确解密。

例如,加密算法可如下:

poskey=md5.create(10+0);对于第一个联系人其加密密钥则是使用md5算法来对坐标生成密钥poskey。

infokey=sha128.create(userid+deviceid);对于用户唯一标识和设备唯一标识则计算用户信息密钥,其中sha128.create则是hash算法sha128的接口,其中userid则是用户id,其中deviceid则是用户的设备id。最后,得到的结果则是用户信息的密钥infokey。

其中,poskey则是一个32位的字符串;infokey则是一个128位的字符串,字符串的位数不做具体限制,32位及128位仅作为示例性说明。

然后,基于权重信息来获得加密密钥(即执行步骤s314)。

具体为:key=poskey[0,num*m%x]+infokey[num*m%x,num*n%y];其中,x、y为字符串的位数,本例中分配权重有如下方式:m(第一权重)<n(第二权重)。num则是通讯录数据的总个数,通过该种方式可以保证通讯录的总个数、控件坐标与用户信息共同对密钥进行影响,提高安全性;同时,可要求权重m<n,由于控件坐标数存在相同的概率高于用户信息(用户id、设备id),因此使权重m<n也可提高密钥的安全性,使用户信息对密钥的影响更大。同样的,也可使x<y,保证用户信息相对于位置坐标对加密密钥的影响更大。

例如:m=0.2,n=0.8,x=32,y=128;poskey[0,num*0.2%32]表示从poskey中取出0到num*0.2%32这么多位字符串,其中权重是0.2。infokey[num*0.2%32,num*0.8%128]表示从infokey中取出num*0.2%32到num*0.8%128这么多位字符串,其中权重是0.8。最终,得到的加密密钥key才是最终对该条通讯录数据进行加密算法的加密密钥。

需要说明的时候,在其他的实施方式中还可以引入用户的用户等级,例如将num替换为用户等级lv,或者增加用户等级lv,或者使用用户等级lv对num进行一次运算(加、减、乘、除),由于用户等级是在使用过程中随着经验值的增加而变化的,可进一步的增强加密的动态性,提高破解难度。

例如:依据用户的通讯录总个数、用户等级来获取加密密钥。

key=poskey[0,(num+lv)*m%x]+infokey[(num+lv)*m%x,(num+lv)*n%y],通过该种方式,在用户等级每一次发生升级后都会对密钥进行一次更新,该更新是被动的,用户升级快表示用户使用客户端比较频繁,具有更高的被病毒窃取通讯录数据的风险,采用用户等级阐述与加密密钥的更新可提高加密密钥的更新频率,提高通讯录数据的安全性,降低通讯录数据的窃取风险。

最后,使用tea加密算法对每条通讯录数据进行进行加密。即,encryptdata=tea.encrypt(key,info);其中,tea.encrypt则是加密算法tea的接口;info则是联系人的信息;加密结果则是encryptdata。

而客户端收到加密的最终加密数据后,具体解密则如下:

view*v=newtextview,pos=v.getposition();通过控件的接口getposition来获取控件的位置坐标。info=tea.decrypt(key,encryptdata),即通过加密时同样的方式计算出解密的密钥key,从而通过解密算法得到原始数据。

步骤s40:基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据。

在步骤s40中,具体包括:

步骤s401:根据预设的控件类型生成控件;其中,所述控件包括属性部分和解密部分;

步骤s402:将每个所述通讯录数据对应的所述控件编号分别匹配给多个控件,其中每个控件对应一个所述控件编号;

步骤s403:将每个所述控件编号对应的所述加密信息与所述加密密钥,分别保存至每个所述控件的属性部分;在步骤s403中,也可对每个加密信息与加密密钥进行再次加密,例如:des.encrypt(data,key),采用传统加密算法des进行加密。保存的方式可通过控件的构造函数中的拷贝代码进行,具体参见后续说明。

步骤s404:将所述控件的总数量与所有所述控件进行加密,获得所述最终加密数据。

在步骤s40中,控件的生成可以基于类型来自动生成的控件代码,控件的类型定义了控件的具体行为和属性信息,以及数据的安全方法。基于控件的类型我们可以使用自动生成代码工具来生成任意多个控件,并且实现每个控件内部加密方式和密钥的不一样,从而保证病毒程序无法同时获取所有通讯录数据。以随机算法的加密为例(对于基于位置坐标的加密方式,设计控件类型中的解密时可基于加密方式进行逆向设置),具体控件类型的设计,例如:

classtextviewxxx1public:view{//首先,可定义一个类名称textviewxxx1表示此控件,后续控件则会变化不同的名称。由于其是继承于基础的view控件,具有可以显示的功能。

控件具有的属性部分包括如下:

chardataxxx[max]表示控件显示的名称;charkeyxxx[key]表示控件的名称的密钥;intposxxxx表示控件在父控件中的x坐标;intposyxxx表示控件在父控件中的y坐标;view*parentxxx表示控件的父控件。

当控件被创建时其构造函数可如下:

textview1(char*data,char*key,intposx,intposy,view*parent);其中,包括加密后的数据data和解密的密钥key。

memcpy(dataxxx,src);表示调用系统函数memcpy来将加密的数据拷贝到dataxxx中。

memcpy(keyxxx,key)表示拷贝密钥数据到keyxxx中。

posxxxx=posx;posyxxx=posy;parentxxx=parent;其中,posxxxx和posyxxx用于告知此控件显示的位置;parent表示此控件的父控件,用于显示到父控件上面;该生成方法是基于一种树状的结构来组织所有的控件。

基于上述定义的类型就可自动生成多套控件代码。

进一步的,由于加密过程在服务器完成,服务器下发的通讯录数据是加密后发送到客户端的,并且在整个过程中客户端都是以密文存储,直到展示控件时才进行解密操作。

因此,需要定义控件的解密部分,在控件中采用临时变量的方式进行解密,包括:

创建控件名称临时变量以及密钥临时变量;所述名称临时变量,用于在所述客户端对所述加密数据中进行解密时,获取所述加密信息;所述密钥临时变量,用于在所述客户端对所述加密数据中进行解密时,获取加密密钥;所述名称临时变量与所述密钥临时变量,还用于在解密完成后清除当前所述控件名称临时变量及所述密钥临时变量中的数据。

示例如下:

classtextviewxxx1public:view{

同样的此接口也是属于控件类型的一个成员方法showtextxxx。

此接口则用于对控件中的数据进行显示。对于本文则只有在进行显示的时候才会对原始数据解密,并且解密的数据是存储在临时变量中,显示完成后则将变量清空,因此绝对的保障了此控件显示数据的安全性。具体实现如下:

对控件进行展示voidshowtextxxx();首先,需要对数据进行解密操作,为了不对客户端在下载时就对最终加密数据进行解密,造成数据泄露,在本实施例中使用临时变量来进行解密操作。如下:

chardataxxxtemp[max]表示控件显示的名称临时变量;charkeyxxxtemp[key]表示控件的名称的密钥临时变量;然后通过memcpy(dataxxxtemp,dataxxx);memcpy(keyxxxtemp,keyxxx)拷贝数据到临时变量中。通过aes.decrypt(dataxxxtemp,keyxxxtemp)在临时变量中进行通讯录数据的解密算法。

由于进行了最终加密,首先是使用步骤s404对应加密算法来对最终加密数据解密一次,得到相应的加密密钥。

然后,使用随机算法来对数据再次的解密。

以步骤s30中的随机算法为例如下:

for(inti=0;i<sizeof(dataxxxtemp);i++),用过该for循环来对dataxxxtemp的每一个字节进行解密操作。其中,sizeof(dataxxxtemp)是计算出数据的长度。

*(dataxxxtemp+i)=(*(dataxxxtemp+i)>>4)|(*(dataxxxtemp+i)<<(8-4))表示数据进行右移位4位和左移位4位来得到最终的数据,以此类推。

*(dataxxxtemp+i)+=0x34表示对通讯录数据加上0x4,其中0x4则也是随机生成的密钥,以此类推。

*(dataxxxtemp+i)=(*(dataxxxtemp+i)<<3)|(*(dataxxxtemp+i)>>(8-3));

*(dataxxxtemp+i)^=0x15;

*(dataxxxtemp+i)+=0x1;

*(dataxxxtemp+i)^=0x34;

*(dataxxxtemp+i)^=0x7a。

需要说明的是随机算法加密时的指令条数也是随机的。解密完成后,可得到控件最终需要显示的文本信息,最后对文本进行展示。其中,那么我们则调用控件提供的接口settext来设置文本信息,settext(dataxxxtemp)。

在解密即展示完成后接下来需要将临时变量的临时数据清除,防止数据泄露。可通过系统函数memset则将变量的内容全部设置为0,memset(dataxxxtemp,0);清除完后,则将统计加入到父控件进行显示,parentxxx->addchild(this,posxxxx,posyxxx)。

通过服务器生成的控件保证了通讯录数据在所有地方都是以密文信息的形式保存,直到显示时才进行解密最终加密数据,并且一旦通讯录数据完成设置并显示到控件后,将临时变量中的数据进行清空处理,提高了安全性。

步骤s50:将所述最终加密数据发送给所述客户端,以使所述客户端在需要进行通讯录数据显示时,对所述最终加密数据进行解密并基于每个所述控件编号创建所述控件。

在步骤s50中,具体的当客户端接收到最终加密数据时进行解密时包括:创建控件名称临时变量以及密钥临时变量;将所述加密数据中的通讯录数据部分拷贝至所述控件名称临时变量中,以及将所述加密数据中的密钥拷贝至所述密钥临时变量中,以在所述控件名称临时变量及所述密钥临时变量中进行解密;清除所述控件名称临时变量及所述密钥临时变量中数据,提高了通讯录数据的安全性。

为了使本发明的方案更加直观易于理解,以一完整示例进行说明:

每次客户端发布版本时,服务器会生成多套控件的代码,那么服务器同时也是具备有控件的算法代码。服务器依据客户端更新请求携带的版本号来取出对应的算法版本号。对于服务器只涉及到通讯录数据而不涉及控件的显示,所以服务器只需要有对应的通讯录数据和加密算法。而加密算法则和解密算法是一个逆向的过程。

以textviewxxx1为例,以c++代码进行实现,具体的逻辑如下:

一、服务器对通讯录数据的加密与下发

1、加密通讯录数据与控件分配

首先加密过程和解密过程是逆向过程。

voidencrypt00010001(char*data){

for(inti=0;i<sizeof(data);i++){

*(data+i)^=0x7a;

*(data+i)^=0x34;

*(data+i)+=0x1;

*(data+i)^=0x15;

*(data+i)=(*(data+i)<<3)|(*(data+i)>>(8-3));

*(data+i)+=0x34;

*(data+i)=(*(data+i)>>4)|(*(data+i)<<(8-4));

}//对每条通讯录数据进行加密。

des.encrypt(data,key);

}//对加密信息和加密密钥进行再次加密。

对于每个控件都具有编号,那么服务器则对上述的加密算法进行编号为encrypt00010001。然后,服务器从数据库读取用户的通讯录数据并对每个信息创建随机的算法编号并执行加密算法。

vector<string>addressbook,定义一个通讯录存储数组addressbook。

然后,我们通过用户的用户信息uid来查询数据库获取其通讯录信息,可通过数据库执行sqlite.excute来获取通讯录信息,即addressbook=sqlite.excute(uid)。

stringresult,即定义一个通讯录返回给客户端的结果数据result。

然后,通讯录每个信息创建数据加密和分配控件,如下:

for(inti=0;i<addressbook.size();i++)

intnrand=rand()%textviewxxx.size()

首先我们获取控件的编号,获取方法则是我们先生成一个随机数据,然后随机数据对控件的总量求余数,从而得到一个编号。其中,rand()是系统获取随机数据的接口;textviewxxx.size()则是控件的总数。得到的随机数据nrand可以对应得到一个编号,加上版本号则得到最终的控件编号,如,版本号为0001,求余得到的编号为0001,那么控件编号为00010001。

2、获取控件的通讯录数据并保存。

data=addressbook[i],获取预设数据库中存储的通讯录数据。

key=rand();encrypt00010001(data);对通讯录数据使用对应控件编号的随机算法进行加密,并获得随机算法的密钥key。从而得到了该条通讯录数据的加密信息以及加密密钥。

然后,将加密信息以及加密密钥存储到控件中。

result.append(00010001);存储通讯录数据的控件编号。

result.append(key);存储加密密钥key。

result.append(data);存储加密信息。

如此循环对于每一个通讯录数据都使用上述方案来进行加密。

3、对各条加密信息进行总加密

最终完成加密和存储后,在结果数据总前面我们存储一个控件的总数,即result=num+result。

整个数据加密完成后,可以进一步保障数据安全,对最终发送给客户端的数据全部进行一个总的加密。如采用idea算法完成加密,即encrypt_result=idea.encrypt(result)。最终获得最终加密数据。

二、当客户端收到最终加密数据后,进行控件的创建。

1、客户端收到服务器下的最终加密数据后,那么首先对最终加密数据解密,然后来解析数据,并创建每个独立的控件。

result=idea.decrypt(encrypt_result);最外层的解密。

2、对result的加密信息进行解析并创建控件。

从result头部取出控件的总数num。

for(inti=0;i<num;i++){

no=result[i];key=result[i];data=result[i];

从result中得到控件编号、对应的加密密钥以及对应的加密信息。

view*=newtextview+no(data,key,posx,posy)};表示依据控件编号来创建对应的控件,最终完成控件的创建并显示。

第二实施例

请参阅图2,在本实施例中提供一种社交客户端通讯录动态保护装置300,该装置300包括:

接收模块301,用于接收客户端对通讯录数据的更新请求;

控件编号生成模块302,用于基于所述更新请求,在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据,并为每个所述通讯录数据生成唯一的控件编号;

加密模块303,用于分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥;

控件生成模块304,用于基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据;

发送模块305,用于将所述最终加密数据发送给所述客户端,以使所述客户端在需要进行通讯录数据显示时,对所述最终加密数据进行解密并基于每个所述控件编号创建所述控件。

作为一种可选的实施方式,所述更新请求携带有所述客户端的用户id与操作指令,所述装置还包括操作模块,用于在所述在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据之前,在预设的数据库中查找与所述用户id对应的通讯录数据;基于所述操作指令,对所述用户id对应的通讯录数据进行操作;其中,所述操作指令包括以下任一种或多种:对指定通讯录数据进行删除;对指定通讯录数据进行修改;添加一条新的通讯录数据。

作为一种可选的实施方式,所述控件编号生成模块302,具体用于:

根据所述客户端的版本号与所述通讯录数据的总数量,生成每个所述控件的控件编号。

作为一种可选的实施方式,所述加密模块303,具体用于:

采用随机算法对每个所述通讯录数据进行加密,分别获得每个所述通讯录数据加密后的加密信息与加密密钥;其中,所述进行加密包括以下任意一种方式或多种方式:对所述通讯录数据进行位移运算,对所述通讯录数据进行异或运算,对所述通讯录数据进行加法运算以及对所述通讯录数据进行减法运算。

作为一种可选的实施方式,所述更新请求携带有所述客户端的用户id以及所述客户端的设备id,所述加密模块303,具体用于:

根据每个所述通讯录数据的所述控件编号,分别确定每个所述控件编号对应的控件坐标;基于每个所述控件坐标,获得每个所述控件坐标的坐标密钥;根据所述用户id和所述设备id,获得所述客户端的用户信息密钥;根据所述通讯录数据的总个数,所述用户信息密钥,以及每个所述坐标密钥,分别获得每个所述通讯录数据的加密密钥;基于每个所述通讯录数据的加密密钥,采用tea加密算法分别对每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息。

作为一种可选的实施方式,所述加密模块303还具体用于:

分别向当前所述控件坐标的密钥以及所述用户信息密钥分配权重,分别获得第一权重和第二权重;其中,所述第一权重为当前所述控件坐标的密钥对应的权重,所述第二权重为所述用户信息密钥对应的权重,所述第一权重小于所述第二权重;基于所述第一权重,在当前所述控件坐标的坐标密钥中取出第一密钥字符串;基于所述第二权重,在所述用户信息密钥中取出第二密钥字符串;将所述第一密钥字符串与所述第二密钥字符串拼接,获得当前所述通讯录数据的加密密钥。

作为一种可选的实施方式,所述控件生成模块304,具体用于:

根据预设的控件类型生成控件;其中,所述控件包括属性部分和解密部分;将每个所述通讯录数据对应的所述控件编号分别匹配给多个控件,其中每个控件对应一个所述控件编号;将每个所述控件编号对应的所述加密信息与所述加密密钥,分别保存至每个所述控件的属性部分;将所述控件的总数量与所有所述控件进行加密,获得所述最终加密数据。

作为一种可选的实施方式,所述控件生成模块304,还具体用于:

创建控件名称临时变量以及密钥临时变量;所述名称临时变量,用于在所述客户端对所述加密数据中进行解密时,获取所述加密信息;所述密钥临时变量,用于在所述客户端对所述加密数据中进行解密时,获取加密密钥;所述名称临时变量与所述密钥临时变量,还用于在解密完成后清除当前所述控件名称临时变量及所述密钥临时变量中的数据。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

第三实施例

基于同一发明构思,如图3所示,本实施例提供了一种社交客户端通讯录动态保护装置400,包括存储器410、处理器420及存储在存储器410上并可在处理器420上运行的计算机程序411,处理器420执行计算机程序411时实现以下步骤:

接收客户端对通讯录数据的更新请求;基于所述更新请求,在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据,并为每个所述通讯录数据生成唯一的控件编号;分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥;基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据;将所述最终加密数据发送给所述客户端,以使所述客户端在需要进行通讯录数据显示时,对所述最终加密数据进行解密并基于每个所述控件编号创建所述控件。

在具体实施过程中,处理器420执行计算机程序411时,可以实现实第一实施例(或第二实施例)中的任一实施方式,在此不再赘述。

第四实施例

基于同一发明构思,如图4所示,本实施例提供了一种计算机可读存储介质500,其上存储有计算机程序511,计算机程序511被处理器执行时实现以下步骤:

接收客户端对通讯录数据的更新请求;基于所述更新请求,在预设的数据库中获取需要进行下发所述客户端的所述通讯录数据,并为每个所述通讯录数据生成唯一的控件编号;分别对对应的每个所述通讯录数据进行加密,获得每个所述通讯录数据的加密信息与加密密钥;基于所述控件编号、所述加密信息与所述加密密钥分别对应生成每个所述通讯录数据的控件,并获得最终加密数据;将所述最终加密数据发送给所述客户端,以使所述客户端在需要进行通讯录数据显示时,对所述最终加密数据进行解密并基于每个所述控件编号创建所述控件。

在具体实施过程中,计算机程序511被处理器执行时,可以实现第一实施例(或第二实施例)中的任一实施方式,在此不再赘述。

上述本申请实施例中的技术方案,至少具有如下的技术效果或优点:

在本发明提供的一种社交客户端通讯录动态保护方法及装置,在接收客户端对通讯录数据的更新请求之后,基于更新请求生成通讯录数据的控件,保证了控件的生成不在客户端进行;然后分别对每个通讯录数据进行加密,避免了病毒程序的一次性破解;由于在服务器上生成每个通讯录数据的控件,只有在客户端接收到最终加密数据之后,客户端才会根据最终加密数据进行解密并基于每个控件编号创建控件,这样在客户端上接收到的数据就会始终以加密的形式保存,仅仅是在显示的时候才创建控件进行显示,由于每条通讯录数据都对应一控件,在进行通讯录数据显示时也会采用对应的多个不同的控件进行显示,避免了病毒程序同时获取到所有的通讯录数据。进一步的,由于控件的生成是在服务器进行的,并不是在客户端本地编写保存好的,当进行版本更新后就需要重新由服务器生成控件并下发,保证了动态性,避免了病毒程序在版本迭代后也能获取通讯录数据。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

本发明中的所述方法功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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