對象加密存儲方法、裝置及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種對象加密存儲方法、裝置及系統(tǒng)。其中,該方法包括:獲取存儲請求,其中,存儲請求攜帶數據對象;獲取與存儲請求對應的加密屬性;對數據對象中對應加密屬性的屬性數據進行加密得到加密對象;將加密對象保存入數據庫。采用本發(fā)明,解決了現有技術中數據存取系統(tǒng)架構中加密對象數據的過程復雜、開發(fā)效率低下的問題,實現了數據存取系統(tǒng)架構中自動加密,極大的降低了手動加密解密開發(fā)成本,并且簡化了對象數據加密的過程,提高了處理速度和開發(fā)效率,降低了開發(fā)成本。
【專利說明】對象加密存儲方法、裝置及系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及數據處理領域,具體而言,涉及一種對象加密存儲方法、裝置及系統(tǒng)。【背景技術】
[0002]對象-關系映射(即Object/Relation Mapping,簡稱數據存取系統(tǒng))提供了概念性的、易于理解的模型化數據的方法。建模者通過收集來自那些熟悉應用程序但不熟練的數據建模者的人的信息開發(fā)信息模型;建模者必須能夠用非技術企業(yè)專家可以理解的術語在概念層次上與數據結構進行通訊;建模者也必須能以簡單的單元分析信息,對樣本數據進行處理。對象和關系數據是業(yè)務實體的兩種表現形式,業(yè)務實體在內存中表現為對象,在數據庫中表現為關系數據。內存中的對象之間存在關聯(lián)和繼承關系,而在數據庫中,關系數據無法直接表達多對多關聯(lián)和繼承關系。因此,對象-關系映射(數據存取系統(tǒng))系統(tǒng)一般以中間件的形式存在,主要實現程序對象到關系數據庫數據的映射。對象關系映射成功運用在不同的面向對象持久層產品中,如:Torque, OJB, Hibernate, TopLink, Castor JDO,TJDO 等。
[0003]結構化查詢語言(Structured Query Language)簡稱SQL,結構化查詢語言是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統(tǒng);同時也是數據庫腳本文件的擴展名。結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同數據庫系統(tǒng)可以使用相同的結構化查詢語言語言作為數據輸入與管理的接口。結構化查詢語言語句可以嵌套,這使他具有極大的靈活性和強大的功能。
[0004]加密是以某種特殊的算法改變原有的信息數據,使得未授權的用戶即使獲得了已加密的信息,但因不知解密的方法,仍然無法了解信息的內容。出于信息保密的目的,在信息傳輸或存儲中,采用密碼技術對需要保密的信息進行處理,使得處理后的信息不能被非受權者(含非法者)讀懂或解讀,這一過程稱為加密。在加密處理過程中,需要保密的信息稱為“明文”,經加密處理后的信息稱為“密文”。加密即是將“明文”變?yōu)椤懊芪摹钡倪^程;與此類似,將“密文”變?yōu)椤懊魑摹钡倪^程被稱為解密。
[0005]在使用面向對象軟件開發(fā)的情況下,數據存取系統(tǒng)架構封裝了 SQL生成過程,使得開發(fā)者能夠快速開發(fā)應用。面對一些敏感數據(例如:密碼)等需要加密的數據時,傳統(tǒng)的數據加密存儲一般為數據庫提供的加密/解密方案,通過SQL的方式在存儲時調用加密函數加密,在提取數據時調用解密函數解密;另外一種是用戶手動加密存儲,提取數據后手動解密。
[0006]由于數據存取系統(tǒng)框架封裝了 SQL的生成過程,所以開發(fā)者無法通過修改SQL語句達到加密的目的;手動進行屬性級別的加密/解密,需要針對所有需要加密屬性進行處理,增加了開發(fā)的復雜性。盡管有數據庫字段級別的加密/解密的方案,但都是與數據存取系統(tǒng)相對獨立的,數據庫加密/解密裝置無法從數據存取系統(tǒng)中獲取信息。對于傳統(tǒng)的對象加密存儲,流程如圖1所示,在該流程中數據存取系統(tǒng)框架加密存儲需要手動加密得到加密后的數據對象然后進入系統(tǒng)數據存儲模塊,使用數據存儲系統(tǒng)使用系統(tǒng)數據對象存儲方法獲取該加密后的數據對象之后傳送至數據讀取系統(tǒng),數據讀取系統(tǒng)通過系統(tǒng)數據對象讀取方法和手動解密得到解密后的數據對象。
[0007]針對現有技術中數據存取系統(tǒng)架構中加密對象數據的過程復雜、效率低下的問題,目前尚未提出有效的解決方案。
【發(fā)明內容】
[0008]針對相關技術中數據存取系統(tǒng)架構中加密對象數據的過程復雜、效率低下的問題,目前尚未提出有效的解決方案,為此,本發(fā)明的主要目的在于提供一種對象加密存儲方法、裝置及系統(tǒng),以解決上述問題。
[0009]為了實現上述目的,根據本發(fā)明的一個方面,提供了一種對象加密存儲方法,該方法包括:獲取存儲請求,其中,存儲請求攜帶數據對象;獲取與存儲請求對應的加密屬性;對數據對象中對應加密屬性的屬性數據進行加密得到加密對象;將加密對象保存入數據庫。
[0010]進一步地,對數據對象中對應加密屬性的屬性數據進行加密得到加密對象的步驟包括:從數據對象中提取與加密屬性對應的屬性數據;使用預設加密密鑰對屬性數據進行加密得到加密數據;使用加密數據更新數據對象得到加密對象。
[0011]進一步地,在將加密對象保存入數據庫之后,對象加密存儲方法還包括:獲取與讀取請求對應的讀取對象;檢測讀取對象是否為加密對象;在讀取對象為加密對象的情況下,對加密對象進行解密得到解密對象,讀取解密對象;在讀取對象不為加密對象的情況下,直接讀取讀取對象。
[0012]進一步地,獲取與存儲請求對應的加密屬性的步驟包括:從數據對象中提取實體信息,其中,實體信息中包括實體屬性;在預設屬性數據庫中存在與實體屬性一致的加密屬性的情況下,提取加密屬性。
[0013]為了實現上述目的,根據本發(fā)明的另一方面,提供了 一種對象加密存儲裝置,該裝置包括:請求獲取模塊,用于獲取存儲請求,其中,存儲請求攜帶數據對象;屬性獲取模塊,用于獲取與存儲請求對應的加密屬性;加密模塊,用于對數據對象中對應加密屬性的屬性數據進行加密得到加密對象;保存模塊,用于將加密對象保存入數據庫。
[0014]進一步地,加密模塊包括:數據提取模塊,用于從數據對象中提取與加密屬性對應的屬性數據;加密子模塊,用于使用預設加密密鑰對屬性數據進行加密得到加密數據;更新模塊,用于使用加密數據更新數據對象得到加密對象。
[0015]進一步地,對象加密存儲裝置還包括:對象獲取模塊,用于獲取與讀取請求對應的讀取對象;檢測模塊,用于檢測讀取對象是否為加密對象;解密讀取模塊,用于在讀取對象為加密對象的情況下,對加密對象進行解密得到解密對象,讀取解密對象;對象讀取模塊,用于在讀取對象不為加密對象的情況下,直接讀取讀取對象。
[0016]進一步地,屬性獲取模塊包括:屬性提取模塊,從數據對象中提取實體信息,其中,實體信息中包括實體屬性;屬性讀取模塊,用于在預設屬性數據庫中存在與實體屬性一致的加密屬性的情況下,讀取加密屬性。[0017]為了實現本發(fā)明的上述目的,本發(fā)明還提供了一種對象加密存儲系統(tǒng),該系統(tǒng)包括:加密裝置,設置在數據庫的存儲接口內,用于獲取存儲請求以及與存儲請求對應的加密屬性,在對數據對象中對應加密屬性的屬性數據進行加密得到加密對象之后,將加密對象保存入數據庫,其中,存儲請求攜帶數據對象。
[0018]進一步地,對象加密存儲系統(tǒng)還包括:解密裝置,設置在數據庫的讀取接口內,用于獲取與讀取請求對應的讀取對象,并在讀取對象為加密對象的情況下,對加密對象進行解密得到解密對象,讀取解密對象;在讀取對象不為加密對象的情況下,直接讀取讀取對象。
[0019]采用本發(fā)明,將加密裝置設置在數據庫的存儲接口內,在獲取模塊獲取到用戶的存儲請求之后,通過屬性獲取模塊和加密模塊直接對數據對象中需要加密的數據加密后才通過保存模塊保存加密后的加密對象,從而可以實現數據存取系統(tǒng)架構中對象屬性級別的自動加密,開發(fā)者無需手動開發(fā)加密/解密的過程,僅需要配置需要加密的屬性即可,從而解決了現有技術中數據存取系統(tǒng)架構中加密對象數據的過程復雜、開發(fā)效率低下的問題,實現了數據存取系統(tǒng)架構中自動加密,極大的降低了手動加密解密開發(fā)成本,并且簡化了對象數據加密的過程,提高了處理速度和開發(fā)效率,降低了開發(fā)成本。
【專利附圖】
【附圖說明】
[0020]此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:
[0021]圖1是現有技術中的數據存取系統(tǒng)架構加密存儲裝置的結構示意圖;以及
[0022]圖2是根據本發(fā)明實施例的加密裝置和解密裝置與數據存取系統(tǒng)架構的關系框圖;
[0023]圖3是根據本發(fā)明實施例的對象加密存儲方法的流程圖;以及
[0024]圖4是根據本發(fā)明實施例的對象加密存儲裝置示意圖。
【具體實施方式】
[0025]需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結合實施例來詳細說明本發(fā)明。
[0026]首先對本申請中涉及的術語進行解釋:
[0027]在本發(fā)明實施例中的Microsoft.NET Framework是用于Windows的新托管代碼編程模型,具體是用于構建具有視覺上引人注目的用戶體驗的應用程序,實現跨技術邊界的無縫通信,并且能支持各種業(yè)務流程。
[0028]AD0.NET Entity Framework是微軟以AD0.NET為基礎所發(fā)展出來的對象關系對應(0/R Mapping)解決方案,早期被稱為0bjectSpace,現已經包含在VisualStudio2008Service Packl 以及? NET Framework3.5Service Packl 中發(fā)表。
[0029]反射:程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象,具體地,可以使用反射動態(tài)地創(chuàng)建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型,然后,通過反射方法調用類型的方法或訪問其字段和屬性。[0030]面向對象(Object Oriented, 00)是一種對現實世界理解和抽象的方法,是計算機編程技術[I]發(fā)展到一定階段后的產物。早期的計算機編程是基于面向過程的方法,例如實現算術運算1+1+2=4,通過設計一個算法就可以解決當時的問題。隨著計算機技術的不斷提高,計算機被用于解決越來越復雜的問題。通過面向對象的方式,將現實世界的物抽象成對象,現實世界中的關系抽象成類、繼承,幫助人們實現對現實世界的抽象與數字建模。通過面向對象的方法,更利于用人理解的方式對復雜系統(tǒng)進行分析、設計與編程。同時,面向對象能有效提高編程的效率,通過封裝技術,消息機制可以像搭積木的一樣快速開發(fā)出一個全新的系統(tǒng)。面向對象是指一種程序設計范型,同時也是一種程序開發(fā)的方法。對象指的是類的集合。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。
[0031]封裝(Encapsulation):隱藏對象的屬性和實現細節(jié),僅對外公開接口,控制在程序中屬性的讀取和修改的訪問級別。封裝就是將抽象得到的數據和行為(或功能)相結合,形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機的結合,形成“類”,其中數據和函數都是類的成員。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現細節(jié),而只是要通過外部接口,以特定的訪問權限來使用類的成員。
[0032]繼承(Inherit):繼承是面向對象語言的重要機制。借助繼承,可以擴展原有的代碼,應用到其他程序中,而不必重新編寫這些代碼。繼承是指一個對象直接使用另一對象的屬性和方法。
[0033]C# CC Sharp)是微軟公司發(fā)布的一種面向對象的、運行于? NET Framework之上的高級程序設計語言。并定于在微軟職業(yè)開發(fā)者論壇(roc)上登臺亮相。c#是微軟公司研究員Anders Hejlsberg的最新成果。C#看起來與Java有著驚人的相似;它包括了諸如單一繼承、接口、與Java幾乎同樣的語法和編譯成中間代碼再運行的過程。但是C#與Java有著明顯的不同,它借鑒了 Delphi的一個特點,與COM (組件對象模型)是直接集成的,而且它是微軟公司.NET windows網絡框架的主角。
[0034]對象(0b ject )就是客觀世界中存在的人、事、物體等實體在計算機邏輯中的映射。
[0035]根據本發(fā)明實施例的提供了一種對象加密存儲系統(tǒng)。該系統(tǒng)可以包括:加密裝置,設置在數據庫的存儲接口內,用于獲取存儲請求以及與存儲請求對應的加密屬性,在對數據對象中對應加密屬性的屬性數據進行加密得到加密對象之后,將加密對象保存入數據庫,其中,存儲請求攜帶數據對象。
[0036]采用本發(fā)明的方案,將加密裝置設置入數據庫的存儲接口內,在接收到用戶的存儲請求之后,直接對數據對象中需要加密的數據加密后才保存加密后的加密對象,從而可以實現數據存取系統(tǒng)架構中對象屬性級別的自動加密,開發(fā)者無需手動開發(fā)加密/解密的過程,僅需要配置需要加密的屬性即可,從而解決了現有技術中數據存取系統(tǒng)架構中加密對象數據的過程復雜、開發(fā)效率低下的問題,實現了數據存取系統(tǒng)架構中自動加密,極大的降低了手動加密解密開發(fā)成本,并且簡化了對象數據加密的過程,提高了處理速度和開發(fā)效率,降低了開發(fā)成本。
[0037]根據本發(fā)明的上述實施例,對象加密存儲系統(tǒng)還可以包括:解密裝置,設置在數據庫的讀取接口內,用于獲取與讀取請求對應的讀取對象,并在讀取對象為加密對象的情況下,對加密對象進行解密得到解密對象,讀取解密對象;在讀取對象不為加密對象的情況下,直接讀取該讀取對象。
[0038]如圖2所示,本系統(tǒng)通過將加密裝置和解密裝置分別封裝入數據存儲系統(tǒng)和數據讀取系統(tǒng),將加密/解密過程注入到數據存取系統(tǒng)框架中,從而可以根據配置信息,在存儲對象前加密,讀取對象后解密,完成了數據存取系統(tǒng)架構中自動的加密/解密。
[0039]具體地,圖2中示出的加密裝置和解密裝置,不僅能夠通過重寫、重載或擴充的方式可以實現,而且任何能夠注入到存儲過程/讀取過程的方式均可;并且任何具有數據存取系統(tǒng)特征實現的數據存儲都可以使用本申請的加密裝置和解密裝置有不同的實現,即無需在數據存取系統(tǒng)框架中增加裝置。另外,還可以直接將本系統(tǒng)的加密裝置和解密裝置內置到數據存取系統(tǒng)框架中。任何將本裝置思想內置到數據存取系統(tǒng)框架中的方案均為本專利的變形,不超出本申請的保護范圍。
[0040]更具體地,在本發(fā)明的上述實施例中,可以為數據存取系統(tǒng)實體類進行擴展,首先配置需要加密的加密屬性以及對應的加密/解密密鑰,下面以ORM為例詳細介紹本發(fā)明:
[0041]其中,ORM系統(tǒng)框架名稱為AD0.NET Entity Framework。具體地,可以將加密裝置內置于數據存取系統(tǒng)框架的數據庫的存儲入口,可以預先設置好該加密裝置的加密屬性,例如:用戶的身份證號、用戶的年齡等。具體地,找到數據存取系統(tǒng)架構的存儲數據對象的存儲入口。以 Microsoft.Net Framework 中的 AD0.NET Entity Framework 為例,ObjectContext對象的SaveChanges方法及重載方法為數據庫的存儲入口。然后對存儲數據對象的方法進行重寫(或擴充、重載),將該加密裝置加入數據庫的存儲入口之后,一旦用戶發(fā)起存儲請求,存儲的處理過程將被暫停,直接進入加密的處理過程。
[0042]具體地,可以通過檢測該存儲請求攜帶的數據對象中是否存在需要加密的數據,也即檢測該數據對象中是否存在與預設的加密屬性對應的屬性數據,如果存在,則使用預設的加密密鑰加密該屬性數據,得到加密數據。在該實施例中,也即數據庫的存儲方法默認存儲行為發(fā)生前加密裝置獲得數據對象。
[0043]例如,在Microsoft.Net Framework 中的 AD0.NET Entity Framework 中,通過ObjectStateManage可以獲得當前被操作的數據對象的集合,并且遮蔽SaveChanges方法(即存儲過程)并調用父類的實現來完成加密存儲。
[0044]在上述實施例中,在接收到存儲請求之后,可以直接從存儲請求中攜帶的數據對象中提取加密屬性對應的屬性數據。具體地,在Microsoft.Net Framework中,可以使用反射的方式從數據對象中獲得加密屬性的屬性數據,通過加密屬性的信息獲取或修改屬性數據的值。例如,可以通過反射的方法從用戶輸入的數據對象中提取加密屬性(如身份證號)的屬性數據,該屬性數據的值可以是18位自然數組成的一個字符串,可以修改該字符串的值。
[0045]在獲取該屬性數據之后,可以根據預設的加密密鑰對該屬性數據進行加密,在上述例子中,可以使用預設的加密密鑰對獲取的18位的字符串進行加密得到加密數據,然后使用該加密數據對身份證號(即加密屬性)重新賦值,從而可以獲取加密對象。
[0046]在獲取加密對象之后執(zhí)行數據存取系統(tǒng)架構的存儲方法對加密對象進行存儲。
[0047]本系統(tǒng)上述實施例中的解密裝置也內置于數據庫中,具體地,找到數據存取系統(tǒng)框架中讀取對象數據為數據對象賦值的讀取入口,將解密裝置內置于其中,在獲取到用戶讀取該讀取對象的請求之后,直接對讀取對象使用與預設的加密密鑰對應得解密密鑰解密對象得到解密對象,以供用戶讀取。
[0048]更具體地,仍然以Microsoft.Net Framework 中的 AD0.NET Entity Framework 為例,ObjectContext對象的LoadProperty方法負責將數據對象賦值,重寫、擴充或重載數據的讀取賦值方法,在每次屬性賦值操作后,如果檢測到讀取的實體的屬性配置為加密屬性,則使用與預設加密密鑰對應的解密密鑰解密該屬性數據,得到解密對象。
[0049]具體地,在本發(fā)明的上述實施例中,獲取用戶的存儲請求或讀取,可以是通過接收用戶的存儲數據對象的請求或接收用戶的讀取請求實現。
[0050]圖3是根據本發(fā)明實施例的對象加密存儲方法的流程圖,如圖3所示該方法包括如下步驟:
[0051]步驟S102,獲取存儲請求,其中,存儲請求攜帶數據對象。
[0052]步驟S104,獲取與存儲請求對應的加密屬性。
[0053]步驟S106,對數據對象中對應加密屬性的屬性數據進行加密得到加密對象。
[0054]步驟S108,將加密對象保存入數據庫。
[0055]采用本發(fā)明,將加密裝置設置在數據庫的存儲接口內,在獲取模塊獲取到用戶的存儲請求之后,通過屬性獲取模塊和加密模塊直接對數據對象中需要加密的數據加密后才通過保存模塊保存加密后的加密對象,從而可以實現數據存取系統(tǒng)架構中對象屬性級別的自動加密,開發(fā)者無需手動開發(fā)加密/解密的過程,僅需要配置需要加密的屬性即可,從而解決了現有技術中數據存取系統(tǒng)架構中加密對象數據的過程復雜、開發(fā)效率低下的問題,實現了數據存取系統(tǒng)架構中自動加密,極大的降低了手動加密解密開發(fā)成本,并且簡化了對象數據加密的過程,提高了處理速度和開發(fā)效率,降低了開發(fā)成本。
[0056]具體地,在上述實施例中對含有加密屬性的數據對象進行屬性級別加密時,可以控制數據對象中的一個或多個屬性數據進行加密,從而獲得加密后的加密對象。可能是部分加密,也可能是所有屬性的值全部被加密。
[0057]具體地,在本發(fā)明的上述實施例中不僅能夠通過重寫、重載或擴充的方式在數據存取系統(tǒng)架構中實現加密存儲,而且任何能夠注入到存儲過程/讀取過程的方式均可以實現加密存儲;并且任何具有數據存取系統(tǒng)特征實現的數據存儲都可以使用本申請的加密裝置和解密裝置有不同的實現,即無需在數據存取系統(tǒng)框架中增加加密裝置或解密裝置。另夕卜,還可以直接將本系統(tǒng)的加密裝置和解密裝置內置到數據存取系統(tǒng)框架中。
[0058]根據本發(fā)明的上述實施例,對數據對象中對應加密屬性的屬性數據進行加密得到加密數據的步驟可以包括:從數據對象中提取與加密屬性對應的屬性數據;使用預設加密密鑰對屬性數據進行加密得到加密數據;使用加密數據更新數據對象得到加密數據。
[0059]具體地,獲取與存儲請求對應的加密屬性的步驟可以包括:暫停存儲數據對象;使用加密函數調取加密屬性。更具體地,獲取加密屬性可以通過如下步驟實現:從數據對象中提取實體信息,其中,實體信息中包括實體屬性;在預設屬性數據庫中存在與實體屬性一致的加密屬性的情況下,提取加密屬性。
[0060]其中,加密屬性可以是在將加密裝置內置于數據庫中是預設好的屬性,也可以是根據不同的數據對象的數據內容而設置的加密屬性。該加密屬性可以是保存在加密裝置中的需要加密的屬性。
[0061]具體地,在從數據對象中提取實體信息之前,可以先從預設屬性數據庫中提取預設屬性,在加密屬性與預設屬性一致的情況下,才需要對該加密屬性對應的屬性數據加密,如果不一致,則不需要對該加密屬性對應的加密屬性加密。將數據對象中的所有加密屬性均需要經過上述是否需要加密的判定。
[0062]在本發(fā)明的上述實施例中,在將加密對象保存入數據庫之后,對象加密存儲方法還可以包括:獲取與讀取請求對應的讀取對象;檢測讀取對象是否為加密對象;在讀取對象為加密對象的情況下,對加密對象進行解密得到解密對象,讀取解密對象;在讀取對象不為加密對象的情況下,直接讀取該讀取對象。
[0063]更具體地,在本發(fā)明的上述實施例中,可以為數據存取系統(tǒng)實體類進行擴展,首先配置需要加密的加密屬性以及對應的加密/解密密鑰,下面以數據存取系統(tǒng)為例詳細介紹本發(fā)明:
[0064]可以將加密裝置內置于數據存取系統(tǒng)框架的數據庫的存儲入口,可以在預設屬性數據庫中預先設置好該加密裝置的加密屬性,例如:用戶的身份證號、用戶的年齡等。具體地,找到數據存取系統(tǒng)架構的存儲數據對象的存儲入口。以Microsoft.Net Framework中的 AD0.NET Entity Framework 為例,0bjectContext 對象的 SaveChanges 方法及重載方法為數據庫的存儲入口。然后對存儲數據對象的方法進行重寫(或擴充、重載),將該加密裝置加入數據庫的存儲入口之后,一旦用戶發(fā)起存儲請求,存儲的處理過程將被暫停,直接進入加密的處理過程。其中,預設屬性數據庫可以保存在數據庫中。
[0065]具體地,可以通過檢測該存儲請求攜帶的數據對象中是否存在需要加密的數據,也即檢測該數據對象中是否存在與預設的加密屬性對應的屬性數據,如果存在,則使用預設的加密密鑰加密該屬性數據,得到加密數據。在該實施例中,也即數據庫的存儲方法默認存儲行為發(fā)生前加密裝置獲得數據對象。
[0066]例如,在Microsoft.Net Framework 中的 AD0.NET Entity Framework 中,通過ObjectStateManage可以獲得當前被操作的數據對象的集合,并且遮蔽SaveChanges方法(即上述實施例中的暫停存儲過程)并在對數據對象完成加密之后調用數據庫中初始的SaveChanges方法來完成對加密對象的加密存儲。
[0067]在上述實施例中,在接收到存儲請求之后,可以直接從存儲請求中攜帶的數據對象中提取加密屬性對應的屬性數據。具體地,在Microsoft.Net Framework中,可以使用反射的方式從數據對象中獲得加密屬性的屬性數據,通過加密屬性的信息獲取或修改屬性數據的值。例如,可以通過反射的方法從用戶輸入的數據對象中提取加密屬性(如身份證號)的屬性數據,該屬性數據的值可以是18位自然數組成的一個字符串,可以修改該字符串的值。
[0068]具體地,加密裝置可以在接收到存儲請求之后,暫停數據庫中初始的存儲過程,從數據對象中提取實體信息,該實體信息中記載著數據對象的各種實體屬性、各種實體屬性對應的屬性數據以及對應數據庫中的各個字段,例如:實體信息中包括對象(如,自然人)的姓名、身份證號:1XXX,身高:165cm,以及對應對象“自然人”在數據庫中的字段:姓名、身高、身份證號。然后在預設屬性數據庫中存在與實體屬性一致的加密屬性的情況下,讀取加密屬性,具體地,可以使用實體屬性在預設屬性數據庫中進行匹配得到加密屬性。例如:在預設屬性數據庫中查找與實體屬性(姓名、年齡、身高以及身份證號)一致的數據,查找到與實體屬性一致的身份證號和年齡兩個加密屬性。然后從數據對象(在該實施例中優(yōu)選從實體信息,可以提高處理速度)中提取加密對象對應的屬性數據(如,年齡對應的數據值:15,身份證號對應的值:123456)。
[0069]在獲取該屬性數據之后,可以根據預設的加密密鑰對該屬性數據進行加密。具體地,將提取到的屬性數據使用預設加密密鑰加密,得到加密數據,使用該加密數據更新加密以得到加密對象。更具體地,使用該加密數據更新實體信息中加密屬性對應的值就可以得到加密對象,也即使用加密數據替換加密屬性原始位置的值。
[0070]例如,可以使用預設的加密密鑰對獲取的18位的字符串進行加密得到加密數據,然后使用該加密數據對身份證號(即加密屬性)重新賦值,從而可以獲取加密對象。
[0071]在獲取加密對象之后執(zhí)行數據存取系統(tǒng)架構的存儲方法對加密對象進行存儲。
[0072]本系統(tǒng)上述實施例中的解密裝置也內置于數據庫中,具體地,找到數據存取系統(tǒng)框架中讀取對象數據為數據對象賦值的讀取入口,將解密裝置內置于其中,在獲取到用戶讀取該讀取對象的請求之后,直接對讀取對象使用與預設的加密密鑰對應得解密密鑰解密對象得到解密對象,以供用戶讀取。
[0073]更具體地,仍然以Microsoft.Net Framework 中的 AD0.NET Entity Framework 為例,ObjectContext對象的LoadProperty方法負責將數據對象賦值,重寫、擴充或重載數據的讀取賦值方法,在每次屬性賦值操作后,如果檢測到讀取的實體的屬性配置為加密屬性,則使用與預設的加密密鑰對應的解密密鑰解密該屬性數據,得到解密實體。在該實施例中可以僅僅檢測實體屬性中是否存在加密屬性,即,可以僅僅檢測數據對象中是否存在需要加密的屬性,而不檢測實體屬性的值是否合法,以提高加密的速度。
[0074]具體地,在本發(fā)明的上述實施例中,獲取用戶的存儲請求或讀取,可以是通過接收用戶的存儲數據對象的請求或接收用戶的讀取請求實現。
[0075]需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0076]圖4是根據本發(fā)明實施例的對象加密存儲裝置的示意圖,如圖4所示該方法包括:請求獲取模塊10,用于獲取存儲請求,其中,存儲請求攜帶數據對象;屬性獲取模塊30,用于獲取與存儲請求對應的加密屬性;加密模塊50,用于對數據對象中對應加密屬性的屬性數據進行加密得到加密對象;保存模塊70,用于將加密對象保存入數據庫。
[0077]采用本發(fā)明,將加密裝置設置在數據庫的存儲接口內,在獲取模塊獲取到用戶的存儲請求之后,通過屬性獲取模塊和加密模塊直接對數據對象中需要加密的數據加密后才通過保存模塊保存加密后的加密對象,從而可以實現數據存取系統(tǒng)架構中對象屬性級別的自動加密,開發(fā)者無需手動開發(fā)加密/解密的過程,僅需要配置需要加密的屬性即可,從而解決了現有技術中數據存取系統(tǒng)架構中加密對象數據的過程復雜、開發(fā)效率低下的問題,實現了數據存取系統(tǒng)架構中自動加密,極大的降低了手動加密解密開發(fā)成本,并且簡化了對象數據加密的過程,提高了處理速度和開發(fā)效率,降低了開發(fā)成本。
[0078]具體地,在本發(fā)明的上述實施例中不僅能夠通過重寫、重載或擴充的方式在數據存取系統(tǒng)架構中實現加密存儲,而且任何能夠注入到存儲過程/讀取過程的方式均可以實現加密存儲;并且任何具有數據存取系統(tǒng)特征實現的數據存儲都可以使用本申請的加密裝置和解密裝置有不同的實現,即無需在數據存取系統(tǒng)框架中增加加密裝置或解密裝置。另夕卜,還可以直接將本系統(tǒng)的加密裝置和解密裝置內置到數據存取系統(tǒng)框架中。
[0079]根據本發(fā)明的上述實施例,加密模塊50可以包括:提取模塊,用于從數據對象中提取與加密屬性對應的屬性數據;加密子模塊,用于使用預設加密密鑰對屬性數據進行加密得到加密數據;更新模塊,用于使用加密數據更新數據對象得到加密數據。
[0080]其中,加密屬性可以是在將加密裝置內置于數據庫中是預設好的屬性,也可以是根據不同的數據對象的數據內容而設置的加密屬性。該加密屬性可以是保存在加密裝置中的需要加密的屬性。
[0081 ] 在本發(fā)明的上述實施例中,對象加密存儲裝置還可以包括:對象獲取模塊,用于獲取與讀取請求對應的讀取對象;檢測模塊,用于檢測讀取對象是否為加密對象;解密讀取模塊,用于在讀取對象為加密對象的情況下,對加密對象進行解密得到解密對象,讀取解密對象;對象讀取模塊,用于在讀取對象不為加密對象的情況下,直接讀取該讀取對象。
[0082]根據本發(fā)明的上述實施例,屬性獲取模塊可以包括:暫停模塊,用于暫停存儲數據對象;調取模塊,用于使用加密函數調取加密屬性。
[0083]具體地,屬性提取模塊,從數據對象中提取實體信息,其中,實體信息中包括實體屬性;屬性讀取模塊,用于在預設屬性數據庫中存在與實體屬性一致的加密屬性的情況下,讀取加密屬性。
[0084]更具體地,在本發(fā)明的上述實施例中,可以為數據存取系統(tǒng)實體類進行擴展,首先配置需要加密的加密屬性以及對應的加密/解密密鑰,下面以數據存取系統(tǒng)為例詳細介紹本發(fā)明:
[0085]可以將加密裝置內置于數據存取系統(tǒng)框架的數據庫的存儲入口,可以在預設屬性數據庫中預先設置好該加密裝置的加密屬性,例如:用戶的身份證號、用戶的年齡等。具體地,找到數據存取系統(tǒng)架構的存儲數據對象的存儲入口。以Microsoft.Net Framework中的 AD0.NET Entity Framework 為例,0bjectContext 對象的 SaveChanges 方法及重載方法為數據庫的存儲入口。然后對存儲數據對象的方法進行重寫(或擴充、重載),將該加密裝置加入數據庫的存儲入口之后,一旦用戶發(fā)起存儲請求,存儲的處理過程將被暫停,直接進入加密的處理過程。其中,預設屬性數據庫可以保存在數據庫中。
[0086]具體地,可以通過檢測該存儲請求攜帶的數據對象中是否存在需要加密的數據,也即檢測該數據對象中是否存在與預設的加密屬性對應的屬性數據,如果存在,則使用預設的加密密鑰加密該屬性數據,得到加密數據。在該實施例中,也即數據庫的存儲方法默認存儲行為發(fā)生前加密裝置獲得數據對象。
[0087]例如,在Microsoft.Net Framework 中的 AD0.NET Entity Framework 中,通過ObjectStateManage可以獲得當前被操作的數據對象的集合,并且遮蔽SaveChanges方法(即上述實施例中的暫停存儲過程)并在對數據對象完成加密之后調用數據庫中初始的SaveChanges方法來完成對加密對象的加密存儲。
[0088]在上述實施例中,在接收到存儲請求之后,可以直接從存儲請求中攜帶的數據對象中提取加密屬性對應的屬性數據。具體地,在Microsoft.Net Framework中,可以使用反射的方式從數據對象中獲得加密屬性的屬性數據,通過加密屬性的信息獲取或修改屬性數據的值。例如,可以通過反射的方法從用戶輸入的數據對象中提取加密屬性(如身份證號)的屬性數據,該屬性數據的值可以是18位自然數組成的一個字符串,可以修改該字符串的值。
[0089]具體地,加密裝置可以在接收到存儲請求之后,暫停數據庫中初始的存儲過程,從數據對象中提取實體信息,該實體信息中記載著數據對象的各種實體屬性、各種實體屬性對應的屬性數據以及對應數據庫中的各個字段,例如:實體信息中包括對象(如,自然人)的姓名、身份證號:1XXX,身高:165cm,以及對應對象“自然人”在數據庫中的字段:姓名、身高、身份證號。然后在預設屬性數據庫中存在與實體屬性一致的加密屬性的情況下,讀取加密屬性,具體地,可以使用實體屬性在預設屬性數據庫中進行匹配得到加密屬性。例如:在預設屬性數據庫中查找與實體屬性(姓名、年齡、身高以及身份證號)一致的數據,查找到與實體屬性一致的身份證號和年齡兩個加密屬性。然后從數據對象(在該實施例中優(yōu)選從實體信息,可以提高處理速度)中提取加密對象對應的屬性數據(如,年齡對應的數據值:15,身份證號對應的值:123456)。
[0090]在獲取該屬性數據之后,可以根據預設的加密密鑰對該屬性數據進行加密。具體地,將提取到的屬性數據使用預設加密密鑰加密,得到加密數據,使用該加密數據更新加密以得到加密對象。更具體地,使用該加密數據更新實體信息中加密屬性對應的值就可以得到加密對象,也即使用加密數據替換加密屬性原始位置的值。
[0091]例如,可以使用預設的加密密鑰對獲取的18位的字符串進行加密得到加密數據,然后使用該加密數據對身份證號(即加密屬性)重新賦值,從而可以獲取加密對象。
[0092]在獲取加密對象之后執(zhí)行數據存取系統(tǒng)架構的存儲方法對加密對象進行存儲。
[0093]本系統(tǒng)上述實施例中的解密裝置也內置于數據庫中,具體地,找到數據存取系統(tǒng)框架中讀取對象數據為數據對象賦值的讀取入口,將解密裝置內置于其中,在獲取到用戶讀取該讀取對象的請求之后,直接對讀取對象,使用與預設的加密密鑰對應得解密密鑰解密對象得到解密對象,以供用戶讀取。
[0094]更具體地,仍然以Microsoft.Net Framework 中的 AD0.NET Entity Framework 為例,ObjectContext對象的LoadProperty方法負責將數據對象賦值,重寫、擴充或重載數據的讀取賦值方法,在每次屬性賦值操作后,如果檢測到讀取的實體的屬性配置為加密屬性,則使用與預設的加密密鑰對應的解密密鑰解密該屬性數據,得到解密實體。在該實施例中可以僅僅檢測實體屬性中是否存在加密屬性,即,可以僅僅檢測數據對象中是否存在需要加密的屬性,而不檢測實體屬性的值是否合法,以提高加密的速度。
[0095]具體地,在本發(fā)明的上述實施例中,獲取用戶的存儲請求或讀取,可以是通過接收用戶的存儲數據對象的請求或接收用戶的讀取請求實現。
[0096]從以上的描述中,可以看出,本發(fā)明實現了如下技術效果:采用本發(fā)明,將加密裝置設置入數據庫的存儲接口內,在獲取模塊獲取到用戶的存儲請求之后,通過屬性獲取模塊和加密模塊直接對數據對象中需要加密的數據加密后才通過保存模塊保存加密后的加密對象,從而可以實現數據存取系統(tǒng)架構中對象屬性級別的自動加密,開發(fā)者無需手動開發(fā)加密/解密的過程,僅需要配置需要加密的屬性即可,從而解決了現有技術中數據存取系統(tǒng)架構中加密對象數據的過程復雜、效率低下的問題,實現了數據存取系統(tǒng)架構中自動加密,極大的降低了手動加密解密開發(fā)成本,并且簡化了對象數據加密的過程,提高了處理速度和效率。
[0097]顯然,本領域的技術人員應該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現,從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現。這樣,本發(fā)明不限制于任何特定的硬件和軟件結合。
[0098]以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
【權利要求】
1.一種對象加密存儲方法,其特征在于,包括: 獲取存儲請求,其中,所述存儲請求攜帶數據對象; 獲取與所述存儲請求對應的加密屬性; 對所述數據對象中對應所述加密屬性的屬性數據進行加密得到加密對象; 將所述加密對象保存入數據庫。
2.根據權利要求1所述的對象加密存儲方法,其特征在于,對所述數據對象中對應所述加密屬性的屬性數據進行加密得到加密對象的步驟包括: 從所述數據對象中提取與所述加密屬性對應的所述屬性數據; 使用預設加密密鑰對所述屬性數據進行加密得到加密數據; 使用所述加密數據更新所述數據對象得到所述加密對象。
3.根據權利要求2所述的對象加密存儲方法,其特征在于,在將所述加密對象保存入數據庫之后,所述對象加密存儲方法還包括: 獲取與讀取請求對應的 讀取對象; 檢測所述讀取對象是否為所述加密對象; 在所述讀取對象為所述加密對象的情況下,對所述加密對象進行解密得到解密對象,讀取所述解密對象; 在所述讀取對象不為所述加密對象的情況下,直接讀取所述讀取對象。
4.根據權利要求1所述的對象加密存儲方法,其特征在于,獲取與所述存儲請求對應的加密屬性的步驟包括: 從所述數據對象中提取實體信息,其中,所述實體信息中包括實體屬性; 在預設屬性數據庫中存在與所述實體屬性一致的所述加密屬性的情況下,提取所述加密屬性。
5.一種對象加密存儲裝置,其特征在于,包括: 請求獲取模塊,用于獲取存儲請求,其中,所述存儲請求攜帶數據對象; 屬性獲取模塊,用于獲取與所述存儲請求對應的加密屬性; 加密模塊,用于對所述數據對象中對應所述加密屬性的屬性數據進行加密得到加密對象; 保存模塊,用于將所述加密對象保存入數據庫。
6.根據權利要求5所述的對象加密存儲裝置,其特征在于,所述加密模塊包括: 數據提取模塊,用于從所述數據對象中提取與所述加密屬性對應的所述屬性數據; 加密子模塊,用于使用預設加密密鑰對所述屬性數據進行加密得到加密數據; 更新模塊,用于使用所述加密數據更新所述數據對象得到所述加密對象。
7.根據權利要求6所述的對象加密存儲裝置,其特征在于,所述對象加密存儲裝置還包括: 對象獲取模塊,用于獲取與讀取請求對應的讀取對象; 檢測模塊,用于檢測所述讀取對象是否為所述加密對象; 解密讀取模塊,用于在所述讀取對象為所述加密對象的情況下,對所述加密對象進行解密得到解密對象,讀取所述解密對象; 對象讀取模塊,用于在所述讀取對象不為所述加密對象的情況下,直接讀取所述讀取對象。
8.根據權利要求5所述的對象加密存儲裝置,其特征在于,所述屬性獲取模塊包括: 屬性提取模塊,從所述數據對象中提取實體信息,其中,所述實體信息中包括實體屬性; 屬性讀取模塊,用于在預設屬性數據庫中存在與所述實體屬性一致的所述加密屬性的情況下,讀取所述加密屬性。
9.一種對象加S存儲系統(tǒng),其特征在于,包括: 加密裝置,設置在數據庫的存儲接口內,用于獲取存儲請求以及與所述存儲請求對應的加密屬性,在對數據對象中對應所述加密屬性的屬性數據進行加密得到加密對象之后,將所述加密對象保存入數據庫, 其中,所述存儲請求攜帶所述數據對象。
10.根據權利要求9所述的對象加密存儲系統(tǒng),其特征在于,對象加密存儲系統(tǒng)還包括: 解密裝置,設置在所述數據庫的讀取接口內,用于獲取與讀取請求對應的讀取對象,并在所述讀取對象為所述加密對象的情況下,對所述加密對象進行解密得到解密對象,讀取所述解密對象;在所述讀取對`象不為所述加密對象的情況下,直接讀取所述讀取對象。
【文檔編號】G06F17/30GK103605741SQ201310586090
【公開日】2014年2月26日 申請日期:2013年11月19日 優(yōu)先權日:2013年11月19日
【發(fā)明者】池雷 申請人:北京國雙科技有限公司