一种基于Keychain的数据管理方法及终端与流程

文档序号:12467865阅读:194来源:国知局
一种基于Keychain的数据管理方法及终端与流程

本发明涉及计算机技术领域,尤其涉及一种基于Keychain的数据管理方法及终端。



背景技术:

目前市场上的绝大多数应用APP都记录有用户信息,并需要把用户信息保留在终端上,用以实现在一定时间段内免登陆,而且能够迅速展示用户信息的功能。其中,例如金融业领域,用户信息是极度安全敏感的,为了避免水平参差的开发工程师用不安全的方式保存用户信息,以及减少大部分开发工程师重复工作量的目的,需要一种安全方便方法以存储和读取用户信息。



技术实现要素:

有鉴于此,本发明实施例提供一种基于Keychain的数据管理方法及终端,本发明实施例对传统的Keychain进行改进,方便了用户信息的存储和读取。

一种基于Keychain的数据管理方法,该方法包括:

构建字典,每个字典对应若干键值对Key-Value,每个Key-Value对应用户的一种属性信息;

接收用户输入的用户信息,所述用户信息包括至少一种属性信息;

将所述用户信息生成相应的字符串;

根据所述属性信息将相应的字符串设置为字典中的Key-Value;

对所述Key-Value进行编码;

将构建的字典写入所述Keychain中;

若接收到用户访问Key-Value的指令,对所述Key-Value进行解码。

具体的,所述对所述Key-Value进行编码,具体包括:

调用编码函数并获取编码器;

利用所述编码器对所述Key-Value进行编码。

具体的,所述对所述Key-Value进行解码,具体包括:

调用解码函数并获取解码器;

利用所述解码器对所述Key-Value进行解码。

具体的,所述方法还包括:

若应用再次启用时,从Keychain中读取所有用户信息。

具体的,所述将构建的字典写入所述Keychain中,具体包括:

对所述Keychain进行封闭并生成数据接口,所述数据接口包括存储数据接口、读取数据接口以及删除数据接口;

根据所述数据接口,将构建的字典写入所述Keychain中。

一种终端,该终端包括:

构建单元,用于构建字典,每个字典对应若干键值对Key-Value,每个Key-Value对应用户的一种属性信息;

接收单元,用于接收用户输入的用户信息,所述用户信息包括至少一种属性信息;

生成单元,用于将所述用户信息生成相应的字符串;

设置单元,用于根据所述属性信息将相应的字符串设置为字典中的Key-Value;

编码单元,用于对所述Key-Value进行编码;

写入单元,用于将构建的字典写入所述Keychain中;

解码单元,用于若接收到用户访问Key-Value的指令,对所述Key-Value进行解码。

具体的,所述编码单元,具体包括:

第一调用单元,用于调用编码函数并获取编码器;

编码子单元,用于利用所述编码器对所述Key-Value进行编码。

具体的,所述解码单元,具体包括:

第二调用单元,用于调用解码函数并获取解码器;

解码子单元,用于利用所述解码器对所述Key-Value进行解码。

具体的,所述终端还包括:

读取单元,用于若应用再次启动时,从Keychain中读取所有用户信息。

具体的,所述写入单元,具体包括:

封装单元,用于对所述Keychain进行封装并生成数据接口,所述数据接口包括存储数据接口、读取数据接口以及删除数据接口;

写入子单元,用于根据所述数据接口,将构建的字典写入所述Keychain中。

由上可见,本发明实施例通过构建字典,利用字典中对应的键值对Key-Value存储用户信息,并将存储有用户信息的字典写入Keychain方便了用户信息的存储,并且在用户信息设置为所述字典中的Key-Value之前,对用户信息进行编码,使得用户信息支持NSCoding协议;在读取Keychain中的用户信息时,对读取的用户信息进行解码并转换成相对应的数据类型,方便对所述用户信息的使用。

附图说明

为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例一提供的一种基于Keychain的数据管理方法的示意流程图。

图2是本发明实施例一提供的一种基于Keychain的数据管理方法的另一示意流程图。

图3是本发明实施例一提供的一种基于Keychain的数据管理方法的另一示意流程图。

图4是本发明实施例一提供的一种基于Keychain的数据管理方法的另一示意流程图。

图5是本发明实施例二提供的一种基于Keychain的数据管理方法的示意流程图。

图6是本发明实施例提供的一种终端的示意性框图。

图7是本发明实施例提供的一种终端的另一示意性框图。

图8是本发明实施例提供的一种终端的另一示意性框图。

图9是本发明实施例提供的一种终端的另一示意性框图。

图10是本发明实施例提供的一种终端的另一示意性框图。

图11是本发明实施例提供的一种终端的另一实施例的结构组成示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

如图1所示,为本发明实施例一提供的一种基于Keychain的数据管理方法的流程示意图。该方法包括步骤S101~S107。

S101,构建字典,每个字典对应若干键值对Key-Value,每个Key-Value对应用户的一种属性信息。在本发明实施例中,Keychain(即钥匙串)是运行在IOS系统上一种存储工具,并能够为系统上的应用提供安全系数较高的数据存储,保证数据的安全性;Keychain可以通过键值对Key-Value的存储方式,将必要的数据进行保存,并且保证该数据不会在一般的文件中被找到或者暴露,亦不会被系统中其他的应用所读取。例如,当用户初次在应用中注册登录时,应用通过构建字典NSDictionary存储用户输入的用户数据,每个字典对应若干键值对Key-Value,其中将用户的账号作为Key,将用户模型作为Value进行存储。

所述属性信息指的是键值对Key-Value中Key与Value的映射关系,在每次存储一个数据时,是根据Key进行索引存储的;相对应的在用户输入的用户数据中,例如用户数据为用户帐号和用户模型,则每一个用户帐号均对应一种用户模型,将用户帐号作为Key以及将用户模型作为Value进行存储,在查询用户数据时,通过调用Key便可查询相对应的Value。

S102,接收用户输入的用户信息,所述用户信息包括至少一种属性信息。

S103,将所述用户信息生成相应的字符串。在本发明实施例中,用户输入的用户数据(例如包括用户帐号、用户模型)并不能直接输入键值对Key-Value中,Key-Value存储的数据类型为字符串类型,需要将用户输入的用户数据转换成Key-Value对应的字符串类型。

S104,根据所述属性信息将相应的字符串设置为字典中的Key-Value。在本发明实施例中,当用户登录应用成功后,创建单例操作类PHKeychainManager将用户输入的用户数据设置为字典中的Key-Value,例如将用户帐号作为Key,与用户帐号相对应的用户模型作为Value,将用户输入的用户帐号和用户模型输入键值对Key-Value。需要说明的是,所创建的单例操作类PHKeychainManager用来统一管理用户数据的输入和读取,单例操作类PHKeychainManager的创建过程为标准化创建,例如,可以在类实现文件中声明一个全局变量_instance,规定此类的统一访问函数为+sharedManager,并在此函数中判断全局变量_instance是否已经初始化,若是,则返回该变量本身,否则使用函数dispatch_once:,以确保_instance只执行一次初始化,并且覆盖其他可能产生新对象的方法,如+allocWithZone:或者-copyWithZone:等。

S105,对所述Key-Value进行编码。在本发明实施例中,由于在开发中用来存储用户数据的Key-Value所在的对象模型是一个实体数据类,例如本发明自定义创建的实体数据类,且继承自NSObject类,实体数据类可以有多项属性,包含用户帐号、姓名、昵称、年龄、性别、头像或者URL地址等具体信息,但是在最初创建的时候实体数据类并不支持NSCoding协议,因此需要对实体数据类进行编码,使得用户数据支持NSCoding协议,以及为所述字典NSDictionary存入Keychain的步骤做准备。

具体地,如图2所示,步骤S104包括步骤S201~S202。

S201,调用编码函数并获取编码器。所述编码函数为-encodeWithCoder:,调用该函数时会传入一个编码器aCoder。

S202,利用所述编码器对所述Key-Value进行编码。对实体数据类中的每个Key-Value都用编码器编码一次,而对于实体数据类中的Key-Value不支持编码的属性,如Int类型的属性,通过NSString类函数+StringWithFormat:转换成NSString类型,再利用编码器对转换后的属性进行编码。

S106,将构建的字典写入所述Keychain中。在本发明实施例中,在将相应的字符串设置为字典中的Key-Value后,再次调用单例操作类PHKeychainManager,将存储有用户数据的字典NSDictionary写入Keychain中。此外,在另外一些可行的实施例中,本发明可以通过监听应用的活动状态,若检测到应用被关闭时,通过单例操作类PHKeychainManager将用户数据存入字典NSDictionary中,并调用操作类PHKeychainWrapper,通过操作类PHKeychainWrapper的数据接口及时把字典NSDictionary保存至Keychain中。

具体地,如图3所示,步骤S106包括步骤S301~S302。

S301,对所述Keychain进行封装并生成数据接口,所述数据接口包括存储数据接口、读取数据接口以及删除数据接口。本发明实施例通过封装一Keychain操作类PHKeychainWrapper方便开发者通过单例操作类PHKeychainManager直接操作Keychain;具体的,对Keychain进行封装并生成三个数据接口,通过数据接口方便用户对Keychain进行直接操作,对Keychain进行封装后生成的三个数据接口分别为,存储数据接口+saveObject:toService:serviceID、读取数据接口+saveObject:toService:serviceID以及删除数据接口+deleteKeychainBy:serviceID。

S302,根据所述数据接口,将构建的字典写入所述Keychain中。本发明实施例通过单例操作类PHKeychainManager对所述Keychain进行数据操作,可以通过对Keychain封装后生成的三个数据接口进行直接操作,例如,可以通过存储数据接口+saveObject:toService:serviceID将存储有用户数据的字典NSDictionary写入Keychain中,可以通过读取数据接口+saveObject:toService:serviceID读取Keychain并获得用户数据,可以通过删除数据接口+deleteKeychainBy:serviceID将Keychain中存储的用户数据进行删除,因此,通过操作类PHKeychainWrapper以及生成的数据接口方便统一管理用户数据的存储、读取以及删除等操作。

S107,若接收到用户访问Key-Value的指令,对所述Key-Value进行解码。

具体地,如图4所示,步骤S107包括步骤S401~S402。

S401,调用解码函数并获取解码器。从Keychain中读取用户数据时调用解码函数,所述解码函数为-initWithCoder:,调用该函数时会传入一个解码器aDecoder。

S402,利用所述解码器对所述Key-Value进行解码。对从Keychain中读取的每个Key-Value都用解码器解码一次,即将每个Key-Value中的用户数据都用解码器解码一次,且解码成NSString类型,再根据需要转换成每个用户数据对应的数据类型,并赋值给相应的对象。

由以上可见,本发明实施例通过构建字典,利用字典中对应的键值对Key-Value存储用户信息,并将存储有用户信息的字典写入Keychain方便了用户信息的存储,并且在用户信息设置为所述字典中的Key-Value之前,对用户信息进行编码,使得用户信息支持NSCoding协议;在读取Keychain中的用户信息时,对读取的用户信息进行解码并转换成相对应的数据类型,方便对所述用户信息的使用。

在本发明一种基于Keychain的数据管理方法的另一个实施例中,如图5所示,为本发明另一实施例提供的流程示图,其包括步骤S501~S508(其中步骤S501~S507与本发明实施例一相同,在此不再详述)。

S501,构建字典,每个字典对应若干键值对Key-Value,每个Key-Value对应用户的一种属性信息。

S502,接收用户输入的用户信息,所述用户信息包括至少一种属性信息。

S503,将所述用户信息生成相应的字符串。

S504,根据所述属性信息将相应的字符串设置为字典中的Key-Value。

S505,对所述Key-Value进行编码。

S506,将构建的字典写入所述Keychain中。

S507,若接收到用户访问Key-Value的指令,对所述Key-Value进行解码。

S508,若应用再次启用时,从Keychain中读取所有用户信息。本发明实施例在检测到应用再次开启时设置了监听,若检测到应用再次启用时,通过单例操作类PHKeychainManager及时响应,并调用操作类PHKeychainWrapper,通过操作类PHKeychainWrapper的数据接口读取Keychain中的用户数据。

由以上可见,本发明实施例通过监听应用的状态,可以防止用户数据的丢失。

如图6所示,对应上述一种基于Keychain的数据管理方法,本发明还提出一种终端,该终端100包括:构建单元10、接收单元20、生成单元30、编码单元40、设置单元50、写入单元60、解码单元70。

其中构建单元10,用于构建字典,每个字典对应若干键值对Key-Value,每个Key-Value对应用户的一种属性信息。在本发明实施例中,Keychain(即钥匙串)是运行在IOS系统上一种存储工具,并能够为系统上的应用提供安全系数较高的数据存储,保证数据的安全性;Keychain可以通过键值对Key-Value的存储方式,将必要的数据进行保存,并且保证该数据不会在一般的文件中被找到或者暴露,亦不会被系统中其他的应用所读取。例如,当用户初次在应用中注册登录时,应用通过构建字典NSDictionary存储用户输入的用户数据,每个字典对应若干键值对Key-Value,其中将用户的账号作为Key,将用户模型作为Value进行存储。所述属性信息指的是键值对Key-Value中Key与Value的映射关系,在每次存储一个数据时,是根据Key进行索引存储的;相对应的在用户输入的用户数据中,例如用户数据为用户帐号和用户模型,则每一个用户帐号均对应一种用户模型,将用户帐号作为Key以及将用户模型作为Value进行存储,在查询用户数据时,通过调用Key便可查询相对应的Value。

接收单元20,用于接收用户输入的用户信息,所述用户信息包括至少一种属性信息。

生成单元30,用于将所述用户信息生成相应的字符串。在本发明实施例中,用户输入的用户数据(例如包括用户帐号、用户模型)并不能直接输入键值对Key-Value中,Key-Value存储的数据类型为字符串类型,需要将用户输入的用户数据转换成Key-Value对应的字符串类型。

设置单元40,用于根据所述属性信息将相应的字符串设置为字典中的Key-Value。在本发明实施例中,当用户登录应用成功后,创建单例操作类PHKeychainManager将用户输入的用户数据设置为字典中的Key-Value,例如将用户帐号作为Key,与用户帐号相对应的用户模型作为Value,将用户输入的用户帐号和用户模型输入键值对Key-Value。需要说明的是,所创建的单例操作类PHKeychainManager用来统一管理用户数据的输入和读取,单例操作类PHKeychainManager的创建过程为标准化创建,例如,可以在类实现文件中声明一个全局变量_instance,规定此类的统一访问函数为+sharedManager,并在此函数中判断全局变量_instance是否已经初始化,若是,则返回该变量本身,否则使用函数dispatch_once:,以确保_instance只执行一次初始化,并且覆盖其他可能产生新对象的方法,如+allocWithZone:或者-copyWithZone:等。

编码单元50,用于对所述Key-Value进行编码。在本发明实施例中,由于在开发中用来存储用户数据的Key-Value所在的对象模型是一个实体数据类,例如本发明自定义创建的实体数据类,且继承自NSObject类,实体数据类可以有多项属性,包含用户帐号、姓名、昵称、年龄、性别、头像或者URL地址等具体信息,但是在最初创建的时候实体数据类并不支持NSCoding协议,因此需要对实体数据类进行编码,使得用户数据支持NSCoding协议,以及为所述字典NSDictionary存入Keychain的步骤做准备。

写入单元60,用于将构建的字典写入所述Keychain中。在本发明实施例中,在将相应的字符串设置为字典中的Key-Value后,再次调用单例操作类PHKeychainManager,将存储有用户数据的字典NSDictionary写入Keychain中。此外,在另外一些可行的实施例中,本发明可以通过监听应用的活动状态,若检测到应用被关闭时,通过单例操作类PHKeychainManager将用户数据存入字典NSDictionary中,并调用操作类PHKeychainWrapper,通过操作类PHKeychainWrapper的数据接口及时把字典NSDictionary保存至Keychain中。。

解码单元70,用于若接收到用户访问Key-Value的指令,对所述Key-Value进行解码。

进一步的,如图7所示,所述编码单元50,具体包括:

第一调用单元501,用于调用编码函数并获取编码器。所述编码函数为-encodeWithCoder:,调用该函数时会传入一个编码器aCoder。

编码子单元502,用于利用所述编码器对相应的字符串进行编码。对实体数据类中的每个Key-Value都用编码器编码一次,而对于实体数据类中的Key-Value不支持编码的属性,如Int类型的属性,通过NSString类函数+StringWithFormat:转换成NSString类型,再利用编码器对转换后的属性进行编码。

进一步的,如图8所示,所述解码单元70,具体包括:

第二调用单元701,用于调用解码函数并获取解码器。从Keychain中读取用户数据时调用解码函数,所述解码函数为-initWithCoder:,调用该函数时会传入一个解码器aDecoder。

解码子单元702,用于利用所述解码器对所述Key-Value进行解码。对从Keychain中读取的每个Key-Value都用解码器解码一次,即将每个Key-Value中的用户数据都用解码器解码一次,且解码成NSString类型,再根据需要转换成每个用户数据对应的数据类型,并赋值给相应的对象。

进一步的,如图9所示,所述终端100,还包括:

读取单元80,用于若应用再次启动时,从Keychain中读取所有用户信息。本发明实施例在检测到应用再次开启时设置了监听,若检测到应用再次启用时,通过单例操作类PHKeychainManager及时响应,并调用操作类PHKeychainWrapper,通过操作类PHKeychainWrapper的数据接口读取Keychain中的用户数据。

进一步的,如图10所示,所述写入单元60,具体包括:

封装单元601,用于对所述Keychain进行封装并生成数据接口,所述数据接口包括存储数据接口、读取数据接口以及删除数据接口。本发明实施例通过封装一Keychain操作类PHKeychainWrapper方便开发者通过单例操作类PHKeychainManager直接操作Keychain;具体的,对Keychain进行封装并生成三个数据接口,通过数据接口方便用户对Keychain进行直接操作,对Keychain进行封装后生成的三个数据接口分别为,存储数据接口+saveObject:toService:serviceID、读取数据接口+saveObject:toService:serviceID以及删除数据接口+deleteKeychainBy:serviceID。

写入子单元602,用于根据所述数据接口,将构建的字典写入所述Keychain中。本发明实施例通过单例操作类PHKeychainManager对所述Keychain进行数据操作,可以通过对Keychain封装后生成的三个数据接口进行直接操作,例如,可以通过存储数据接口+saveObject:toService:serviceID将存储有用户数据的字典NSDictionary写入Keychain中,可以通过读取数据接口+saveObject:toService:serviceID读取Keychain并获得用户数据,可以通过删除数据接口+deleteKeychainBy:serviceID将Keychain中存储的用户数据进行删除,因此,通过操作类PHKeychainWrapper以及生成的数据接口方便统一管理用户数据的存储、读取以及删除等操作。

图11为本发明的终端的另一实施例的结构组成示意图。如图11所示,其可包括:输入装置99、输出装置88、收发装置77、存储器66以及处理器55,其中:

所述输入装置99,用于接收外部访问控制设备的输入数据。具体实现中,本发明实施例所述的输入装置99可包括键盘、鼠标、光电输入装置、声音输入装置、触摸式输入装置、扫描仪等。

所述输出装置88,用于对外输出访问控制设备的输出数据。具体实现中,本发明实施例所述的输出装置88可包括显示器、扬声器、打印机等。

所述收发装置77,用于通过通信链路向其他设备发送数据或者从其他设备接收数据。具体实现中,本发明实施例的收发装置77可包括射频天线等收发器件。

所述存储器66,用于存储带有各种功能的程序数据。本发明实施例中存储器66存储的数据包括可调用并运行的程序数据。具体实现中,本发明实施例的存储器66可以是系统存储器,比如,挥发性的(诸如RAM),非易失性的(诸如ROM,闪存等),或者两者的结合。具体实现中,本发明实施例的存储器66还可以是系统之外的外部存储器,比如,磁盘、光盘、磁带等。

所述处理器55,用于调用所述存储器66中存储的程序数据,并执行如下操作:

构建字典,每个字典对应若干键值对Key-Value,每个Key-Value对应用户的一种属性信息;接收用户输入的用户信息,所述用户信息包括至少一种属性信息;将所述用户信息生成相应的字符串;根据所述属性信息将相应的字符串设置为字典中的Key-Value;对所述Key-Value进行编码;将构建的字典写入所述Keychain中;若接收到用户访问Key-Value的指令,对所述Key-Value进行解码。

进一步地,所述处理器55还执行如下操作:

调用编码函数并获取编码器;利用所述编码器对所述Key-Value进行编码。

进一步地,所述处理器55还执行如下操作:

调用解码函数并获取解码器;利用所述解码器对所述Key-Value进行解码。

进一步地,所述处理器55还执行如下操作:

若应用再次启用时,从Keychain中读取所有用户信息。

进一步地,所述处理器55还执行如下操作:

对所述Keychain进行封闭并生成数据接口,所述数据接口包括存储数据接口、读取数据接口以及删除数据接口;根据所述数据接口,将构建的字典写入所述Keychain中。

本发明所有实施例中的单元可以通过通用集成电路,例如CPU(Central Processing Unit,中央处理器),或通过ASIC(Application Specific Integrated Circuit,专用集成电路)来实现。

本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。

本发明实施例终端中的单元可以根据实际需要进行合并、划分和删减。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

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

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