对象加密存储方法、装置及系统的制作方法

文档序号:6519873阅读:203来源:国知局
对象加密存储方法、装置及系统的制作方法
【专利摘要】本发明公开了一种对象加密存储方法、装置及系统。其中,该方法包括:获取存储请求,其中,存储请求携带数据对象;获取与存储请求对应的加密属性;对数据对象中对应加密属性的属性数据进行加密得到加密对象;将加密对象保存入数据库。采用本发明,解决了现有技术中数据存取系统架构中加密对象数据的过程复杂、开发效率低下的问题,实现了数据存取系统架构中自动加密,极大的降低了手动加密解密开发成本,并且简化了对象数据加密的过程,提高了处理速度和开发效率,降低了开发成本。
【专利说明】对象加密存储方法、装置及系统
【技术领域】
[0001]本发明涉及数据处理领域,具体而言,涉及一种对象加密存储方法、装置及系统。【背景技术】
[0002]对象-关系映射(即Object/Relation Mapping,简称数据存取系统)提供了概念性的、易于理解的模型化数据的方法。建模者通过收集来自那些熟悉应用程序但不熟练的数据建模者的人的信息开发信息模型;建模者必须能够用非技术企业专家可以理解的术语在概念层次上与数据结构进行通讯;建模者也必须能以简单的单元分析信息,对样本数据进行处理。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(数据存取系统)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。对象关系映射成功运用在不同的面向对象持久层产品中,如:Torque, OJB, Hibernate, TopLink, Castor JDO,TJDO 等。
[0003]结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使他具有极大的灵活性和强大的功能。
[0004]加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。出于信息保密的目的,在信息传输或存储中,采用密码技术对需要保密的信息进行处理,使得处理后的信息不能被非受权者(含非法者)读懂或解读,这一过程称为加密。在加密处理过程中,需要保密的信息称为“明文”,经加密处理后的信息称为“密文”。加密即是将“明文”变为“密文”的过程;与此类似,将“密文”变为“明文”的过程被称为解密。
[0005]在使用面向对象软件开发的情况下,数据存取系统架构封装了 SQL生成过程,使得开发者能够快速开发应用。面对一些敏感数据(例如:密码)等需要加密的数据时,传统的数据加密存储一般为数据库提供的加密/解密方案,通过SQL的方式在存储时调用加密函数加密,在提取数据时调用解密函数解密;另外一种是用户手动加密存储,提取数据后手动解密。
[0006]由于数据存取系统框架封装了 SQL的生成过程,所以开发者无法通过修改SQL语句达到加密的目的;手动进行属性级别的加密/解密,需要针对所有需要加密属性进行处理,增加了开发的复杂性。尽管有数据库字段级别的加密/解密的方案,但都是与数据存取系统相对独立的,数据库加密/解密装置无法从数据存取系统中获取信息。对于传统的对象加密存储,流程如图1所示,在该流程中数据存取系统框架加密存储需要手动加密得到加密后的数据对象然后进入系统数据存储模块,使用数据存储系统使用系统数据对象存储方法获取该加密后的数据对象之后传送至数据读取系统,数据读取系统通过系统数据对象读取方法和手动解密得到解密后的数据对象。
[0007]针对现有技术中数据存取系统架构中加密对象数据的过程复杂、效率低下的问题,目前尚未提出有效的解决方案。

【发明内容】

[0008]针对相关技术中数据存取系统架构中加密对象数据的过程复杂、效率低下的问题,目前尚未提出有效的解决方案,为此,本发明的主要目的在于提供一种对象加密存储方法、装置及系统,以解决上述问题。
[0009]为了实现上述目的,根据本发明的一个方面,提供了一种对象加密存储方法,该方法包括:获取存储请求,其中,存储请求携带数据对象;获取与存储请求对应的加密属性;对数据对象中对应加密属性的属性数据进行加密得到加密对象;将加密对象保存入数据库。
[0010]进一步地,对数据对象中对应加密属性的属性数据进行加密得到加密对象的步骤包括:从数据对象中提取与加密属性对应的属性数据;使用预设加密密钥对属性数据进行加密得到加密数据;使用加密数据更新数据对象得到加密对象。
[0011]进一步地,在将加密对象保存入数据库之后,对象加密存储方法还包括:获取与读取请求对应的读取对象;检测读取对象是否为加密对象;在读取对象为加密对象的情况下,对加密对象进行解密得到解密对象,读取解密对象;在读取对象不为加密对象的情况下,直接读取读取对象。
[0012]进一步地,获取与存储请求对应的加密属性的步骤包括:从数据对象中提取实体信息,其中,实体信息中包括实体属性;在预设属性数据库中存在与实体属性一致的加密属性的情况下,提取加密属性。
[0013]为了实现上述目的,根据本发明的另一方面,提供了 一种对象加密存储装置,该装置包括:请求获取模块,用于获取存储请求,其中,存储请求携带数据对象;属性获取模块,用于获取与存储请求对应的加密属性;加密模块,用于对数据对象中对应加密属性的属性数据进行加密得到加密对象;保存模块,用于将加密对象保存入数据库。
[0014]进一步地,加密模块包括:数据提取模块,用于从数据对象中提取与加密属性对应的属性数据;加密子模块,用于使用预设加密密钥对属性数据进行加密得到加密数据;更新模块,用于使用加密数据更新数据对象得到加密对象。
[0015]进一步地,对象加密存储装置还包括:对象获取模块,用于获取与读取请求对应的读取对象;检测模块,用于检测读取对象是否为加密对象;解密读取模块,用于在读取对象为加密对象的情况下,对加密对象进行解密得到解密对象,读取解密对象;对象读取模块,用于在读取对象不为加密对象的情况下,直接读取读取对象。
[0016]进一步地,属性获取模块包括:属性提取模块,从数据对象中提取实体信息,其中,实体信息中包括实体属性;属性读取模块,用于在预设属性数据库中存在与实体属性一致的加密属性的情况下,读取加密属性。[0017]为了实现本发明的上述目的,本发明还提供了一种对象加密存储系统,该系统包括:加密装置,设置在数据库的存储接口内,用于获取存储请求以及与存储请求对应的加密属性,在对数据对象中对应加密属性的属性数据进行加密得到加密对象之后,将加密对象保存入数据库,其中,存储请求携带数据对象。
[0018]进一步地,对象加密存储系统还包括:解密装置,设置在数据库的读取接口内,用于获取与读取请求对应的读取对象,并在读取对象为加密对象的情况下,对加密对象进行解密得到解密对象,读取解密对象;在读取对象不为加密对象的情况下,直接读取读取对象。
[0019]采用本发明,将加密装置设置在数据库的存储接口内,在获取模块获取到用户的存储请求之后,通过属性获取模块和加密模块直接对数据对象中需要加密的数据加密后才通过保存模块保存加密后的加密对象,从而可以实现数据存取系统架构中对象属性级别的自动加密,开发者无需手动开发加密/解密的过程,仅需要配置需要加密的属性即可,从而解决了现有技术中数据存取系统架构中加密对象数据的过程复杂、开发效率低下的问题,实现了数据存取系统架构中自动加密,极大的降低了手动加密解密开发成本,并且简化了对象数据加密的过程,提高了处理速度和开发效率,降低了开发成本。
【专利附图】

【附图说明】
[0020]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0021]图1是现有技术中的数据存取系统架构加密存储装置的结构示意图;以及
[0022]图2是根据本发明实施例的加密装置和解密装置与数据存取系统架构的关系框图;
[0023]图3是根据本发明实施例的对象加密存储方法的流程图;以及
[0024]图4是根据本发明实施例的对象加密存储装置示意图。
【具体实施方式】
[0025]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
[0026]首先对本申请中涉及的术语进行解释:
[0027]在本发明实施例中的Microsoft.NET Framework是用于Windows的新托管代码编程模型,具体是用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信,并且能支持各种业务流程。
[0028]AD0.NET Entity Framework是微软以AD0.NET为基础所发展出来的对象关系对应(0/R Mapping)解决方案,早期被称为0bjectSpace,现已经包含在VisualStudio2008Service Packl 以及? NET Framework3.5Service Packl 中发表。
[0029]反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象,具体地,可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后,通过反射方法调用类型的方法或访问其字段和属性。[0030]面向对象(Object Oriented, 00)是一种对现实世界理解和抽象的方法,是计算机编程技术[I]发展到一定阶段后的产物。早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2=4,通过设计一个算法就可以解决当时的问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。通过面向对象的方式,将现实世界的物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的集合。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
[0031]封装(Encapsulation):隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。
[0032]继承(Inherit):继承是面向对象语言的重要机制。借助继承,可以扩展原有的代码,应用到其他程序中,而不必重新编写这些代码。继承是指一个对象直接使用另一对象的属性和方法。
[0033]C# CC Sharp)是微软公司发布的一种面向对象的、运行于? NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(roc)上登台亮相。c#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了 Delphi的一个特点,与COM (组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。
[0034]对象(0b ject )就是客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。
[0035]根据本发明实施例的提供了一种对象加密存储系统。该系统可以包括:加密装置,设置在数据库的存储接口内,用于获取存储请求以及与存储请求对应的加密属性,在对数据对象中对应加密属性的属性数据进行加密得到加密对象之后,将加密对象保存入数据库,其中,存储请求携带数据对象。
[0036]采用本发明的方案,将加密装置设置入数据库的存储接口内,在接收到用户的存储请求之后,直接对数据对象中需要加密的数据加密后才保存加密后的加密对象,从而可以实现数据存取系统架构中对象属性级别的自动加密,开发者无需手动开发加密/解密的过程,仅需要配置需要加密的属性即可,从而解决了现有技术中数据存取系统架构中加密对象数据的过程复杂、开发效率低下的问题,实现了数据存取系统架构中自动加密,极大的降低了手动加密解密开发成本,并且简化了对象数据加密的过程,提高了处理速度和开发效率,降低了开发成本。
[0037]根据本发明的上述实施例,对象加密存储系统还可以包括:解密装置,设置在数据库的读取接口内,用于获取与读取请求对应的读取对象,并在读取对象为加密对象的情况下,对加密对象进行解密得到解密对象,读取解密对象;在读取对象不为加密对象的情况下,直接读取该读取对象。
[0038]如图2所示,本系统通过将加密装置和解密装置分别封装入数据存储系统和数据读取系统,将加密/解密过程注入到数据存取系统框架中,从而可以根据配置信息,在存储对象前加密,读取对象后解密,完成了数据存取系统架构中自动的加密/解密。
[0039]具体地,图2中示出的加密装置和解密装置,不仅能够通过重写、重载或扩充的方式可以实现,而且任何能够注入到存储过程/读取过程的方式均可;并且任何具有数据存取系统特征实现的数据存储都可以使用本申请的加密装置和解密装置有不同的实现,即无需在数据存取系统框架中增加装置。另外,还可以直接将本系统的加密装置和解密装置内置到数据存取系统框架中。任何将本装置思想内置到数据存取系统框架中的方案均为本专利的变形,不超出本申请的保护范围。
[0040]更具体地,在本发明的上述实施例中,可以为数据存取系统实体类进行扩展,首先配置需要加密的加密属性以及对应的加密/解密密钥,下面以ORM为例详细介绍本发明:
[0041]其中,ORM系统框架名称为AD0.NET Entity Framework。具体地,可以将加密装置内置于数据存取系统框架的数据库的存储入口,可以预先设置好该加密装置的加密属性,例如:用户的身份证号、用户的年龄等。具体地,找到数据存取系统架构的存储数据对象的存储入口。以 Microsoft.Net Framework 中的 AD0.NET Entity Framework 为例,ObjectContext对象的SaveChanges方法及重载方法为数据库的存储入口。然后对存储数据对象的方法进行重写(或扩充、重载),将该加密装置加入数据库的存储入口之后,一旦用户发起存储请求,存储的处理过程将被暂停,直接进入加密的处理过程。
[0042]具体地,可以通过检测该存储请求携带的数据对象中是否存在需要加密的数据,也即检测该数据对象中是否存在与预设的加密属性对应的属性数据,如果存在,则使用预设的加密密钥加密该属性数据,得到加密数据。在该实施例中,也即数据库的存储方法默认存储行为发生前加密装置获得数据对象。
[0043]例如,在Microsoft.Net Framework 中的 AD0.NET Entity Framework 中,通过ObjectStateManage可以获得当前被操作的数据对象的集合,并且遮蔽SaveChanges方法(即存储过程)并调用父类的实现来完成加密存储。
[0044]在上述实施例中,在接收到存储请求之后,可以直接从存储请求中携带的数据对象中提取加密属性对应的属性数据。具体地,在Microsoft.Net Framework中,可以使用反射的方式从数据对象中获得加密属性的属性数据,通过加密属性的信息获取或修改属性数据的值。例如,可以通过反射的方法从用户输入的数据对象中提取加密属性(如身份证号)的属性数据,该属性数据的值可以是18位自然数组成的一个字符串,可以修改该字符串的值。
[0045]在获取该属性数据之后,可以根据预设的加密密钥对该属性数据进行加密,在上述例子中,可以使用预设的加密密钥对获取的18位的字符串进行加密得到加密数据,然后使用该加密数据对身份证号(即加密属性)重新赋值,从而可以获取加密对象。
[0046]在获取加密对象之后执行数据存取系统架构的存储方法对加密对象进行存储。
[0047]本系统上述实施例中的解密装置也内置于数据库中,具体地,找到数据存取系统框架中读取对象数据为数据对象赋值的读取入口,将解密装置内置于其中,在获取到用户读取该读取对象的请求之后,直接对读取对象使用与预设的加密密钥对应得解密密钥解密对象得到解密对象,以供用户读取。
[0048]更具体地,仍然以Microsoft.Net Framework 中的 AD0.NET Entity Framework 为例,ObjectContext对象的LoadProperty方法负责将数据对象赋值,重写、扩充或重载数据的读取赋值方法,在每次属性赋值操作后,如果检测到读取的实体的属性配置为加密属性,则使用与预设加密密钥对应的解密密钥解密该属性数据,得到解密对象。
[0049]具体地,在本发明的上述实施例中,获取用户的存储请求或读取,可以是通过接收用户的存储数据对象的请求或接收用户的读取请求实现。
[0050]图3是根据本发明实施例的对象加密存储方法的流程图,如图3所示该方法包括如下步骤:
[0051]步骤S102,获取存储请求,其中,存储请求携带数据对象。
[0052]步骤S104,获取与存储请求对应的加密属性。
[0053]步骤S106,对数据对象中对应加密属性的属性数据进行加密得到加密对象。
[0054]步骤S108,将加密对象保存入数据库。
[0055]采用本发明,将加密装置设置在数据库的存储接口内,在获取模块获取到用户的存储请求之后,通过属性获取模块和加密模块直接对数据对象中需要加密的数据加密后才通过保存模块保存加密后的加密对象,从而可以实现数据存取系统架构中对象属性级别的自动加密,开发者无需手动开发加密/解密的过程,仅需要配置需要加密的属性即可,从而解决了现有技术中数据存取系统架构中加密对象数据的过程复杂、开发效率低下的问题,实现了数据存取系统架构中自动加密,极大的降低了手动加密解密开发成本,并且简化了对象数据加密的过程,提高了处理速度和开发效率,降低了开发成本。
[0056]具体地,在上述实施例中对含有加密属性的数据对象进行属性级别加密时,可以控制数据对象中的一个或多个属性数据进行加密,从而获得加密后的加密对象。可能是部分加密,也可能是所有属性的值全部被加密。
[0057]具体地,在本发明的上述实施例中不仅能够通过重写、重载或扩充的方式在数据存取系统架构中实现加密存储,而且任何能够注入到存储过程/读取过程的方式均可以实现加密存储;并且任何具有数据存取系统特征实现的数据存储都可以使用本申请的加密装置和解密装置有不同的实现,即无需在数据存取系统框架中增加加密装置或解密装置。另夕卜,还可以直接将本系统的加密装置和解密装置内置到数据存取系统框架中。
[0058]根据本发明的上述实施例,对数据对象中对应加密属性的属性数据进行加密得到加密数据的步骤可以包括:从数据对象中提取与加密属性对应的属性数据;使用预设加密密钥对属性数据进行加密得到加密数据;使用加密数据更新数据对象得到加密数据。
[0059]具体地,获取与存储请求对应的加密属性的步骤可以包括:暂停存储数据对象;使用加密函数调取加密属性。更具体地,获取加密属性可以通过如下步骤实现:从数据对象中提取实体信息,其中,实体信息中包括实体属性;在预设属性数据库中存在与实体属性一致的加密属性的情况下,提取加密属性。
[0060]其中,加密属性可以是在将加密装置内置于数据库中是预设好的属性,也可以是根据不同的数据对象的数据内容而设置的加密属性。该加密属性可以是保存在加密装置中的需要加密的属性。
[0061]具体地,在从数据对象中提取实体信息之前,可以先从预设属性数据库中提取预设属性,在加密属性与预设属性一致的情况下,才需要对该加密属性对应的属性数据加密,如果不一致,则不需要对该加密属性对应的加密属性加密。将数据对象中的所有加密属性均需要经过上述是否需要加密的判定。
[0062]在本发明的上述实施例中,在将加密对象保存入数据库之后,对象加密存储方法还可以包括:获取与读取请求对应的读取对象;检测读取对象是否为加密对象;在读取对象为加密对象的情况下,对加密对象进行解密得到解密对象,读取解密对象;在读取对象不为加密对象的情况下,直接读取该读取对象。
[0063]更具体地,在本发明的上述实施例中,可以为数据存取系统实体类进行扩展,首先配置需要加密的加密属性以及对应的加密/解密密钥,下面以数据存取系统为例详细介绍本发明:
[0064]可以将加密装置内置于数据存取系统框架的数据库的存储入口,可以在预设属性数据库中预先设置好该加密装置的加密属性,例如:用户的身份证号、用户的年龄等。具体地,找到数据存取系统架构的存储数据对象的存储入口。以Microsoft.Net Framework中的 AD0.NET Entity Framework 为例,0bjectContext 对象的 SaveChanges 方法及重载方法为数据库的存储入口。然后对存储数据对象的方法进行重写(或扩充、重载),将该加密装置加入数据库的存储入口之后,一旦用户发起存储请求,存储的处理过程将被暂停,直接进入加密的处理过程。其中,预设属性数据库可以保存在数据库中。
[0065]具体地,可以通过检测该存储请求携带的数据对象中是否存在需要加密的数据,也即检测该数据对象中是否存在与预设的加密属性对应的属性数据,如果存在,则使用预设的加密密钥加密该属性数据,得到加密数据。在该实施例中,也即数据库的存储方法默认存储行为发生前加密装置获得数据对象。
[0066]例如,在Microsoft.Net Framework 中的 AD0.NET Entity Framework 中,通过ObjectStateManage可以获得当前被操作的数据对象的集合,并且遮蔽SaveChanges方法(即上述实施例中的暂停存储过程)并在对数据对象完成加密之后调用数据库中初始的SaveChanges方法来完成对加密对象的加密存储。
[0067]在上述实施例中,在接收到存储请求之后,可以直接从存储请求中携带的数据对象中提取加密属性对应的属性数据。具体地,在Microsoft.Net Framework中,可以使用反射的方式从数据对象中获得加密属性的属性数据,通过加密属性的信息获取或修改属性数据的值。例如,可以通过反射的方法从用户输入的数据对象中提取加密属性(如身份证号)的属性数据,该属性数据的值可以是18位自然数组成的一个字符串,可以修改该字符串的值。
[0068]具体地,加密装置可以在接收到存储请求之后,暂停数据库中初始的存储过程,从数据对象中提取实体信息,该实体信息中记载着数据对象的各种实体属性、各种实体属性对应的属性数据以及对应数据库中的各个字段,例如:实体信息中包括对象(如,自然人)的姓名、身份证号:1XXX,身高:165cm,以及对应对象“自然人”在数据库中的字段:姓名、身高、身份证号。然后在预设属性数据库中存在与实体属性一致的加密属性的情况下,读取加密属性,具体地,可以使用实体属性在预设属性数据库中进行匹配得到加密属性。例如:在预设属性数据库中查找与实体属性(姓名、年龄、身高以及身份证号)一致的数据,查找到与实体属性一致的身份证号和年龄两个加密属性。然后从数据对象(在该实施例中优选从实体信息,可以提高处理速度)中提取加密对象对应的属性数据(如,年龄对应的数据值:15,身份证号对应的值:123456)。
[0069]在获取该属性数据之后,可以根据预设的加密密钥对该属性数据进行加密。具体地,将提取到的属性数据使用预设加密密钥加密,得到加密数据,使用该加密数据更新加密以得到加密对象。更具体地,使用该加密数据更新实体信息中加密属性对应的值就可以得到加密对象,也即使用加密数据替换加密属性原始位置的值。
[0070]例如,可以使用预设的加密密钥对获取的18位的字符串进行加密得到加密数据,然后使用该加密数据对身份证号(即加密属性)重新赋值,从而可以获取加密对象。
[0071]在获取加密对象之后执行数据存取系统架构的存储方法对加密对象进行存储。
[0072]本系统上述实施例中的解密装置也内置于数据库中,具体地,找到数据存取系统框架中读取对象数据为数据对象赋值的读取入口,将解密装置内置于其中,在获取到用户读取该读取对象的请求之后,直接对读取对象使用与预设的加密密钥对应得解密密钥解密对象得到解密对象,以供用户读取。
[0073]更具体地,仍然以Microsoft.Net Framework 中的 AD0.NET Entity Framework 为例,ObjectContext对象的LoadProperty方法负责将数据对象赋值,重写、扩充或重载数据的读取赋值方法,在每次属性赋值操作后,如果检测到读取的实体的属性配置为加密属性,则使用与预设的加密密钥对应的解密密钥解密该属性数据,得到解密实体。在该实施例中可以仅仅检测实体属性中是否存在加密属性,即,可以仅仅检测数据对象中是否存在需要加密的属性,而不检测实体属性的值是否合法,以提高加密的速度。
[0074]具体地,在本发明的上述实施例中,获取用户的存储请求或读取,可以是通过接收用户的存储数据对象的请求或接收用户的读取请求实现。
[0075]需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0076]图4是根据本发明实施例的对象加密存储装置的示意图,如图4所示该方法包括:请求获取模块10,用于获取存储请求,其中,存储请求携带数据对象;属性获取模块30,用于获取与存储请求对应的加密属性;加密模块50,用于对数据对象中对应加密属性的属性数据进行加密得到加密对象;保存模块70,用于将加密对象保存入数据库。
[0077]采用本发明,将加密装置设置在数据库的存储接口内,在获取模块获取到用户的存储请求之后,通过属性获取模块和加密模块直接对数据对象中需要加密的数据加密后才通过保存模块保存加密后的加密对象,从而可以实现数据存取系统架构中对象属性级别的自动加密,开发者无需手动开发加密/解密的过程,仅需要配置需要加密的属性即可,从而解决了现有技术中数据存取系统架构中加密对象数据的过程复杂、开发效率低下的问题,实现了数据存取系统架构中自动加密,极大的降低了手动加密解密开发成本,并且简化了对象数据加密的过程,提高了处理速度和开发效率,降低了开发成本。
[0078]具体地,在本发明的上述实施例中不仅能够通过重写、重载或扩充的方式在数据存取系统架构中实现加密存储,而且任何能够注入到存储过程/读取过程的方式均可以实现加密存储;并且任何具有数据存取系统特征实现的数据存储都可以使用本申请的加密装置和解密装置有不同的实现,即无需在数据存取系统框架中增加加密装置或解密装置。另夕卜,还可以直接将本系统的加密装置和解密装置内置到数据存取系统框架中。
[0079]根据本发明的上述实施例,加密模块50可以包括:提取模块,用于从数据对象中提取与加密属性对应的属性数据;加密子模块,用于使用预设加密密钥对属性数据进行加密得到加密数据;更新模块,用于使用加密数据更新数据对象得到加密数据。
[0080]其中,加密属性可以是在将加密装置内置于数据库中是预设好的属性,也可以是根据不同的数据对象的数据内容而设置的加密属性。该加密属性可以是保存在加密装置中的需要加密的属性。
[0081 ] 在本发明的上述实施例中,对象加密存储装置还可以包括:对象获取模块,用于获取与读取请求对应的读取对象;检测模块,用于检测读取对象是否为加密对象;解密读取模块,用于在读取对象为加密对象的情况下,对加密对象进行解密得到解密对象,读取解密对象;对象读取模块,用于在读取对象不为加密对象的情况下,直接读取该读取对象。
[0082]根据本发明的上述实施例,属性获取模块可以包括:暂停模块,用于暂停存储数据对象;调取模块,用于使用加密函数调取加密属性。
[0083]具体地,属性提取模块,从数据对象中提取实体信息,其中,实体信息中包括实体属性;属性读取模块,用于在预设属性数据库中存在与实体属性一致的加密属性的情况下,读取加密属性。
[0084]更具体地,在本发明的上述实施例中,可以为数据存取系统实体类进行扩展,首先配置需要加密的加密属性以及对应的加密/解密密钥,下面以数据存取系统为例详细介绍本发明:
[0085]可以将加密装置内置于数据存取系统框架的数据库的存储入口,可以在预设属性数据库中预先设置好该加密装置的加密属性,例如:用户的身份证号、用户的年龄等。具体地,找到数据存取系统架构的存储数据对象的存储入口。以Microsoft.Net Framework中的 AD0.NET Entity Framework 为例,0bjectContext 对象的 SaveChanges 方法及重载方法为数据库的存储入口。然后对存储数据对象的方法进行重写(或扩充、重载),将该加密装置加入数据库的存储入口之后,一旦用户发起存储请求,存储的处理过程将被暂停,直接进入加密的处理过程。其中,预设属性数据库可以保存在数据库中。
[0086]具体地,可以通过检测该存储请求携带的数据对象中是否存在需要加密的数据,也即检测该数据对象中是否存在与预设的加密属性对应的属性数据,如果存在,则使用预设的加密密钥加密该属性数据,得到加密数据。在该实施例中,也即数据库的存储方法默认存储行为发生前加密装置获得数据对象。
[0087]例如,在Microsoft.Net Framework 中的 AD0.NET Entity Framework 中,通过ObjectStateManage可以获得当前被操作的数据对象的集合,并且遮蔽SaveChanges方法(即上述实施例中的暂停存储过程)并在对数据对象完成加密之后调用数据库中初始的SaveChanges方法来完成对加密对象的加密存储。
[0088]在上述实施例中,在接收到存储请求之后,可以直接从存储请求中携带的数据对象中提取加密属性对应的属性数据。具体地,在Microsoft.Net Framework中,可以使用反射的方式从数据对象中获得加密属性的属性数据,通过加密属性的信息获取或修改属性数据的值。例如,可以通过反射的方法从用户输入的数据对象中提取加密属性(如身份证号)的属性数据,该属性数据的值可以是18位自然数组成的一个字符串,可以修改该字符串的值。
[0089]具体地,加密装置可以在接收到存储请求之后,暂停数据库中初始的存储过程,从数据对象中提取实体信息,该实体信息中记载着数据对象的各种实体属性、各种实体属性对应的属性数据以及对应数据库中的各个字段,例如:实体信息中包括对象(如,自然人)的姓名、身份证号:1XXX,身高:165cm,以及对应对象“自然人”在数据库中的字段:姓名、身高、身份证号。然后在预设属性数据库中存在与实体属性一致的加密属性的情况下,读取加密属性,具体地,可以使用实体属性在预设属性数据库中进行匹配得到加密属性。例如:在预设属性数据库中查找与实体属性(姓名、年龄、身高以及身份证号)一致的数据,查找到与实体属性一致的身份证号和年龄两个加密属性。然后从数据对象(在该实施例中优选从实体信息,可以提高处理速度)中提取加密对象对应的属性数据(如,年龄对应的数据值:15,身份证号对应的值:123456)。
[0090]在获取该属性数据之后,可以根据预设的加密密钥对该属性数据进行加密。具体地,将提取到的属性数据使用预设加密密钥加密,得到加密数据,使用该加密数据更新加密以得到加密对象。更具体地,使用该加密数据更新实体信息中加密属性对应的值就可以得到加密对象,也即使用加密数据替换加密属性原始位置的值。
[0091]例如,可以使用预设的加密密钥对获取的18位的字符串进行加密得到加密数据,然后使用该加密数据对身份证号(即加密属性)重新赋值,从而可以获取加密对象。
[0092]在获取加密对象之后执行数据存取系统架构的存储方法对加密对象进行存储。
[0093]本系统上述实施例中的解密装置也内置于数据库中,具体地,找到数据存取系统框架中读取对象数据为数据对象赋值的读取入口,将解密装置内置于其中,在获取到用户读取该读取对象的请求之后,直接对读取对象,使用与预设的加密密钥对应得解密密钥解密对象得到解密对象,以供用户读取。
[0094]更具体地,仍然以Microsoft.Net Framework 中的 AD0.NET Entity Framework 为例,ObjectContext对象的LoadProperty方法负责将数据对象赋值,重写、扩充或重载数据的读取赋值方法,在每次属性赋值操作后,如果检测到读取的实体的属性配置为加密属性,则使用与预设的加密密钥对应的解密密钥解密该属性数据,得到解密实体。在该实施例中可以仅仅检测实体属性中是否存在加密属性,即,可以仅仅检测数据对象中是否存在需要加密的属性,而不检测实体属性的值是否合法,以提高加密的速度。
[0095]具体地,在本发明的上述实施例中,获取用户的存储请求或读取,可以是通过接收用户的存储数据对象的请求或接收用户的读取请求实现。
[0096]从以上的描述中,可以看出,本发明实现了如下技术效果:采用本发明,将加密装置设置入数据库的存储接口内,在获取模块获取到用户的存储请求之后,通过属性获取模块和加密模块直接对数据对象中需要加密的数据加密后才通过保存模块保存加密后的加密对象,从而可以实现数据存取系统架构中对象属性级别的自动加密,开发者无需手动开发加密/解密的过程,仅需要配置需要加密的属性即可,从而解决了现有技术中数据存取系统架构中加密对象数据的过程复杂、效率低下的问题,实现了数据存取系统架构中自动加密,极大的降低了手动加密解密开发成本,并且简化了对象数据加密的过程,提高了处理速度和效率。
[0097]显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
[0098]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种对象加密存储方法,其特征在于,包括: 获取存储请求,其中,所述存储请求携带数据对象; 获取与所述存储请求对应的加密属性; 对所述数据对象中对应所述加密属性的属性数据进行加密得到加密对象; 将所述加密对象保存入数据库。
2.根据权利要求1所述的对象加密存储方法,其特征在于,对所述数据对象中对应所述加密属性的属性数据进行加密得到加密对象的步骤包括: 从所述数据对象中提取与所述加密属性对应的所述属性数据; 使用预设加密密钥对所述属性数据进行加密得到加密数据; 使用所述加密数据更新所述数据对象得到所述加密对象。
3.根据权利要求2所述的对象加密存储方法,其特征在于,在将所述加密对象保存入数据库之后,所述对象加密存储方法还包括: 获取与读取请求对应的 读取对象; 检测所述读取对象是否为所述加密对象; 在所述读取对象为所述加密对象的情况下,对所述加密对象进行解密得到解密对象,读取所述解密对象; 在所述读取对象不为所述加密对象的情况下,直接读取所述读取对象。
4.根据权利要求1所述的对象加密存储方法,其特征在于,获取与所述存储请求对应的加密属性的步骤包括: 从所述数据对象中提取实体信息,其中,所述实体信息中包括实体属性; 在预设属性数据库中存在与所述实体属性一致的所述加密属性的情况下,提取所述加密属性。
5.一种对象加密存储装置,其特征在于,包括: 请求获取模块,用于获取存储请求,其中,所述存储请求携带数据对象; 属性获取模块,用于获取与所述存储请求对应的加密属性; 加密模块,用于对所述数据对象中对应所述加密属性的属性数据进行加密得到加密对象; 保存模块,用于将所述加密对象保存入数据库。
6.根据权利要求5所述的对象加密存储装置,其特征在于,所述加密模块包括: 数据提取模块,用于从所述数据对象中提取与所述加密属性对应的所述属性数据; 加密子模块,用于使用预设加密密钥对所述属性数据进行加密得到加密数据; 更新模块,用于使用所述加密数据更新所述数据对象得到所述加密对象。
7.根据权利要求6所述的对象加密存储装置,其特征在于,所述对象加密存储装置还包括: 对象获取模块,用于获取与读取请求对应的读取对象; 检测模块,用于检测所述读取对象是否为所述加密对象; 解密读取模块,用于在所述读取对象为所述加密对象的情况下,对所述加密对象进行解密得到解密对象,读取所述解密对象; 对象读取模块,用于在所述读取对象不为所述加密对象的情况下,直接读取所述读取对象。
8.根据权利要求5所述的对象加密存储装置,其特征在于,所述属性获取模块包括: 属性提取模块,从所述数据对象中提取实体信息,其中,所述实体信息中包括实体属性; 属性读取模块,用于在预设属性数据库中存在与所述实体属性一致的所述加密属性的情况下,读取所述加密属性。
9.一种对象加S存储系统,其特征在于,包括: 加密装置,设置在数据库的存储接口内,用于获取存储请求以及与所述存储请求对应的加密属性,在对数据对象中对应所述加密属性的属性数据进行加密得到加密对象之后,将所述加密对象保存入数据库, 其中,所述存储请求携带所述数据对象。
10.根据权利要求9所述的对象加密存储系统,其特征在于,对象加密存储系统还包括: 解密装置,设置在所述数据库的读取接口内,用于获取与读取请求对应的读取对象,并在所述读取对象为所述加密对象的情况下,对所述加密对象进行解密得到解密对象,读取所述解密对象;在所述读取对`象不为所述加密对象的情况下,直接读取所述读取对象。
【文档编号】G06F17/30GK103605741SQ201310586090
【公开日】2014年2月26日 申请日期:2013年11月19日 优先权日:2013年11月19日
【发明者】池雷 申请人:北京国双科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1