安全訪問數(shù)據(jù)的方法及裝置制造方法
【專利摘要】本發(fā)明提供了一種安全訪問數(shù)據(jù)的方法及裝置,其中,所述方法包括:對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù);將用戶訪問加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口;在用戶訪問加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載加密數(shù)據(jù)訪問接口;進(jìn)而使用數(shù)據(jù)加密密鑰,通過加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)。通過本方法可以提供了一種在弱安全環(huán)境下對數(shù)據(jù)安全訪問的方法,可以從后端的數(shù)據(jù)存儲(chǔ)到前端的數(shù)據(jù)訪問都給出了一個(gè)有效的解決方法;其次,不需要任何加密設(shè)備投入,能有效控制成本;第三,用戶使用高效、便利、安全,學(xué)習(xí)成本低,使用簡單。
【專利說明】安全訪問數(shù)據(jù)的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)安全領(lǐng)域,特別地,涉及安全訪問數(shù)據(jù)的方法及裝置。
【背景技術(shù)】
[0002]數(shù)據(jù)在錄入、傳輸、處理、統(tǒng)計(jì)以及打印的過程中,可能由于硬件故障、斷電、死機(jī)、誤操作、程序缺陷、計(jì)算機(jī)病毒、黑客攻擊等原因而造成的數(shù)據(jù)丟失或數(shù)據(jù)泄密,數(shù)據(jù)安全的任務(wù)就是如何有效地防止因類似上述原因造成的數(shù)據(jù)丟失或這泄密。數(shù)據(jù)安全具有三個(gè)基本特點(diǎn):
1.保密性,又稱機(jī)密性,是指確保數(shù)據(jù)信息不被其他未授權(quán)者獲得;
2.數(shù)據(jù)完整性,是指在傳輸、存儲(chǔ)信息或數(shù)據(jù)的過程中,確保信息或數(shù)據(jù)不被篡改或在篡改后能夠被迅速發(fā)現(xiàn);
3.數(shù)據(jù)可用性,是一種以使用者為中心的設(shè)計(jì)概念,設(shè)計(jì)的重點(diǎn)在于讓產(chǎn)品的設(shè)計(jì)能夠符合使用者的習(xí)慣與需求。
[0003]目前業(yè)界保證數(shù)據(jù)安全訪問的方式主要有兩種:一是利用密碼學(xué)知識(shí)對數(shù)據(jù)進(jìn)行加密處理,如使用鏈路加密、節(jié)點(diǎn)加密、端到端加密等技術(shù),其特點(diǎn)是將一個(gè)信息經(jīng)過加密鑰匙及加密函數(shù)轉(zhuǎn)換,變成無意義的密文,而接收方則將此密文經(jīng)過解密函數(shù)、解密鑰匙等還原成明文;二是依靠硬件加密,硬件加密是通過專用加密芯片或獨(dú)立的處理芯片等實(shí)現(xiàn)密碼運(yùn)算,需要將加密芯片、專有電子鑰匙、數(shù)據(jù)存儲(chǔ)設(shè)備一一對應(yīng)使用,加密芯片將把加密芯片信息、專有鑰匙信息、硬盤信息進(jìn)行對應(yīng)并做加密運(yùn)算,同時(shí)寫入硬盤的主分區(qū)表,這種實(shí)現(xiàn)方式下加密芯片、專有電子鑰匙、數(shù)據(jù)存儲(chǔ)設(shè)備綁定在一起,缺少任何一個(gè)都將無法使用,經(jīng)過加密后硬盤如果脫離相應(yīng)的加密芯片和電子鑰匙,在計(jì)算機(jī)上將無法識(shí)別,更無法得到任何數(shù)據(jù)。
[0004]上述實(shí)現(xiàn)方式有如下缺點(diǎn):利用密碼學(xué)知識(shí)對數(shù)據(jù)進(jìn)行加密處理,密碼學(xué)中的加密算法雖然能很好的保護(hù)數(shù)據(jù),但是這種方式多側(cè)重于數(shù)據(jù)層面,僅僅是在數(shù)據(jù)端對數(shù)據(jù)本身進(jìn)行加密,對整個(gè)數(shù)據(jù)安全訪問問題并沒有提出一個(gè)完整的解決方案;而硬件加密涉及到大量的硬件設(shè)備,其成本投入巨大,并且操作復(fù)雜,密碼設(shè)備如果丟失則數(shù)據(jù)資料很難還原。因此,需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問題就是:如何提供一種安全訪問數(shù)據(jù)的方法,能夠在有效控制成本的條件下,更加高效便利地實(shí)現(xiàn)安全的訪問數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問題是提供一種安全訪問數(shù)據(jù)的方法及裝置,能夠在有效控制成本的條件下,更加高效便利地實(shí)現(xiàn)安全的訪問數(shù)據(jù)。
[0006]為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種一種安全訪問數(shù)據(jù)的方法,包括:
對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù);
將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口; 在用戶訪問所述加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載所述加密數(shù)據(jù)訪問接口;
使用數(shù)據(jù)加密密鑰,通過所述加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)。
[0007]可選地,所述對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù),包括:
利用特定加密算法對源數(shù)據(jù)進(jìn)行加密,并生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將所述加密數(shù)據(jù)以及所述完整性校驗(yàn)字符串對應(yīng)存儲(chǔ)。
[0008]可選地,所述利用特定加密算法對源數(shù)據(jù)進(jìn)行加密,并生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將所述加密數(shù)據(jù)以及所述完整性校驗(yàn)字符串對應(yīng)存儲(chǔ),包括:
獲取所述源數(shù)據(jù),并利用高級加密標(biāo)準(zhǔn)AES加密算法,或用戶自定義加密算法對源數(shù)據(jù)進(jìn)行加密;并利用消息摘要算法第五版MD5算法,或用戶自定義校驗(yàn)算法生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將所述加密數(shù)據(jù)以及所述完整性校驗(yàn)字符串對應(yīng)存儲(chǔ)。
[0009]可選地,所述將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口,包括:
將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為Java歸檔文件Jar包形式的加密數(shù)據(jù)訪問接口。
[0010]可選地,所述將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為Java歸檔文件Jar包形式的加密數(shù)據(jù)訪問接口,包括:
讀取和加載待加密Jar包,根據(jù)后綴名分析待加密Jar包中的類文件;
讀取待加密Jar包中的類文件,并寫入類字節(jié)數(shù)組,將待加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存;
利用預(yù)置的加密算法加密所述各個(gè)類文件對應(yīng)的類字節(jié)數(shù)組;所述預(yù)置的加密算法包括高級加密標(biāo)準(zhǔn)AES加密算法,或用戶自定義加密算法;
初始化類文件流和Jar包壓縮流,將加密后的類字節(jié)數(shù)組內(nèi)容寫回至類文件流,再將所有得到的類文件流寫入至Jar包壓縮流,以Jar包形式存儲(chǔ),生成Jar包形式的加密數(shù)據(jù)訪問接口。
[0011]可選地,所述在用戶訪問所述加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載所述加密數(shù)據(jù)訪問接口,包括:
加載所述加密數(shù)據(jù)訪問接口的加密Jar包,生成對應(yīng)的壓縮文件流,根據(jù)后綴名分析加密Jar包中的類文件;
讀取加密Jar包中的類文件內(nèi)容,并寫入類字節(jié)數(shù)組,將加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存;
接收用戶輸入的目標(biāo)類名,并根據(jù)所述目標(biāo)類名查找所述Map集合;
如果所述Map集合中存在所述目標(biāo)類名,則獲取對應(yīng)的目標(biāo)類字節(jié)數(shù)組,并利用所述接口加密密鑰對所述目標(biāo)類字節(jié)數(shù)組進(jìn)行解密;
將解密后的目標(biāo)類字節(jié)數(shù)組轉(zhuǎn)換為對應(yīng)的類實(shí)例,完成所述目標(biāo)類名對應(yīng)的類的加載。
[0012]可選地,還包括:
接收用戶輸入的目標(biāo)類名,判斷已加載的類中是否包含所述目標(biāo)類名對應(yīng)的類;若包含則中止該類的重復(fù)加載。[0013]可選地,還包括:
在加載所述目標(biāo)類名對應(yīng)的類時(shí),類加載器以向上遞進(jìn)的方式嘗試將加載任務(wù)代理給其父類加載器進(jìn)行加載;其中,如果父類加載器本身還具有父類加載器,則將加載任務(wù)代理給其父類加載器,依次類推,只有當(dāng)父類加載器不能成功加載該類,此時(shí)才會(huì)將該類交還給子類加載。
[0014]可選地,所述使用數(shù)據(jù)加密密鑰,通過所述加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù),包括:
加載Java數(shù)據(jù)庫連接JDBC驅(qū)動(dòng)程序到Java虛擬機(jī),將驅(qū)動(dòng)類的實(shí)例注冊到驅(qū)動(dòng)管理類中;
提供JDBC連接的統(tǒng)一資源定位符URL ;其中所述URL包括連接數(shù)據(jù)庫所需的協(xié)議,子協(xié)議,以及數(shù)據(jù)源標(biāo)識(shí);其中所述協(xié)議以字符jdbc開始;所述子協(xié)議包括橋連接的驅(qū)動(dòng)程序或數(shù)據(jù)庫管理系統(tǒng)名稱;所述數(shù)據(jù)源標(biāo)識(shí)包括到數(shù)據(jù)庫來源的地址與連接端口 ;
創(chuàng)建數(shù)據(jù)庫連接,獲取數(shù)據(jù)庫連接對象,并傳入的連接路徑,用戶以及密碼;
接收用戶提交的數(shù)據(jù)庫查詢語句,并接收對應(yīng)的數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)。
[0015]可選地,還包括:
利用預(yù)置的校驗(yàn)算法對所述數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行完整性校驗(yàn);所述預(yù)置的校驗(yàn)算法包括消息摘要算法第五版MD5算法,或用戶自定義校驗(yàn)算法;
利用預(yù)置的解密算法對所述數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行解密處理,獲取對應(yīng)的目標(biāo)數(shù)據(jù)。所述預(yù)置的解密算法包括AES加密算法,或用戶自定義加密算法。
[0016]相應(yīng)的,提供了一種一種安全訪問數(shù)據(jù)的裝置,包括:
數(shù)據(jù)加密模塊,用于對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù);
接口加密模塊,用于將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口 ;
接口加載模塊,用于在用戶訪問所述加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載所述加密數(shù)據(jù)訪問接口;
數(shù)據(jù)獲取模塊,用于使用數(shù)據(jù)加密密鑰,通過所述加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)。
[0017]可選地,所述數(shù)據(jù)加密模塊,包括:
數(shù)據(jù)加密子模塊,用于利用特定加密算法對源數(shù)據(jù)進(jìn)行加密,并生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將所述加密數(shù)據(jù)以及所述完整性校驗(yàn)字符串對應(yīng)存儲(chǔ)。
[0018]可選地,所述數(shù)據(jù)加密子模塊,具體用于:
獲取所述源數(shù)據(jù),并利用高級加密標(biāo)準(zhǔn)AES加密算法,或用戶自定義加密算法對源數(shù)據(jù)進(jìn)行加密;并利用消息摘要算法第五版MD5算法,或用戶自定義校驗(yàn)算法生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將所述加密數(shù)據(jù)以及所述完整性校驗(yàn)字符串對應(yīng)存儲(chǔ)。
[0019]可選地,所述接口加密模塊,包括:
接口加密子模塊,用于將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為Java歸檔文件Jar包形式的加密數(shù)據(jù)訪問接口。
[0020]可選地,所述接口加密子模塊,具體用于:
讀取和加載待加密Jar包,根據(jù)后綴名分析待加密Jar包中的類文件;
讀取待加密Jar包中的類文件,并寫入類字節(jié)數(shù)組,將待加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存;
利用預(yù)置的加密算法加密所述各個(gè)類文件對應(yīng)的類字節(jié)數(shù)組;所述預(yù)置的加密算法包括高級加密標(biāo)準(zhǔn)AES加密算法,或用戶自定義加密算法;
初始化類文件流和Jar包壓縮流,將加密后的類字節(jié)數(shù)組內(nèi)容寫回至類文件流,再將所有得到的類文件流寫入至Jar包壓縮流,以Jar包形式存儲(chǔ),生成Jar包形式的加密數(shù)據(jù)訪問接口。
[0021]可選地,所述接口加載模塊,具體用于:
加載所述加密數(shù)據(jù)訪問接口的加密Jar包,生成對應(yīng)的壓縮文件流,根據(jù)后綴名分析加密Jar包中的類文件;
讀取加密Jar包中的類文件內(nèi)容,并寫入類字節(jié)數(shù)組,將加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存;
接收用戶輸入的目標(biāo)類名,并根據(jù)所述目標(biāo)類名查找所述Map集合;
如果所述Map集合中存在所述目標(biāo)類名,則獲取對應(yīng)的目標(biāo)類字節(jié)數(shù)組,并利用所述接口加密密鑰對所述目標(biāo)類字節(jié)數(shù)組進(jìn)行解密;
將解密后的目標(biāo)類字節(jié)數(shù)組轉(zhuǎn)換為對應(yīng)的類實(shí)例,完成所述目標(biāo)類名對應(yīng)的類的加載。
[0022]可選地,還包括:
重復(fù)加載檢測單元,用于接收用戶輸入的目標(biāo)類名,判斷已加載的類中是否包含所述目標(biāo)類名對應(yīng)的類;若包含則中止該類的重復(fù)加載。
[0023]可選地,還包括:
父類委托單元,用于在加載所述目標(biāo)類名對應(yīng)的類時(shí),類加載器以向上遞進(jìn)的方式嘗試將加載任務(wù)代理給其父類加載器進(jìn)行加載;其中,如果父類加載器本身還具有父類加載器,則將加載任務(wù)代理給其父類加載器,依次類推,只有當(dāng)父類加載器不能成功加載該類,此時(shí)才會(huì)將該類交還給子類加載。
[0024]可選地,所述數(shù)據(jù)獲取模塊,具體用于:
加載Java數(shù)據(jù)庫連接JDBC驅(qū)動(dòng)程序到Java虛擬機(jī),將驅(qū)動(dòng)類的實(shí)例注冊到驅(qū)動(dòng)管理類中;
提供JDBC連接的統(tǒng)一資源定位符URL ;其中所述URL包括連接數(shù)據(jù)庫所需的協(xié)議,子協(xié)議,以及數(shù)據(jù)源標(biāo)識(shí);其中所述協(xié)議以字符jdbc開始;所述子協(xié)議包括橋連接的驅(qū)動(dòng)程序或數(shù)據(jù)庫管理系統(tǒng)名稱;所述數(shù)據(jù)源標(biāo)識(shí)包括到數(shù)據(jù)庫來源的地址與連接端口 ;
創(chuàng)建數(shù)據(jù)庫連接,獲取數(shù)據(jù)庫連接對象,并傳入的連接路徑,用戶以及密碼;
接收用戶提交的數(shù)據(jù)庫查詢語句,并接收對應(yīng)的數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)。
[0025]可選地,還包括:
完整性校驗(yàn)?zāi)K,用于利用預(yù)置的校驗(yàn)算法對所述數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行完整性校驗(yàn);所述預(yù)置的校驗(yàn)算法包括消息摘要算法第五版MD5算法,或用戶自定義校驗(yàn)算法;
數(shù)據(jù)解密模塊,用于利用預(yù)置的解密算法對所述數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行解密處理,獲取對應(yīng)的目標(biāo)數(shù)據(jù)。所述預(yù)置的解密算法包括AES加密算法,或用戶自定義加密算法。[0026]與現(xiàn)有技術(shù)相比,上述技術(shù)方案中的一個(gè)技術(shù)方案具有以下優(yōu)點(diǎn)或有益效果:該方法對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù);將用戶訪問加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口 ;在用戶訪問加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載加密數(shù)據(jù)訪問接口 ;進(jìn)而使用數(shù)據(jù)加密密鑰,通過加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)。通過本方法可以提供了一種在弱安全環(huán)境下對數(shù)據(jù)安全訪問的方法,可以從后端的數(shù)據(jù)存儲(chǔ)到前端的數(shù)據(jù)訪問都給出了一個(gè)有效的解決方法;其次,不需要任何加密設(shè)備投入,能有效控制成本;第三,用戶使用高效、便利、安全,學(xué)習(xí)成本低,使用簡單。
【專利附圖】
【附圖說明】
[0027]圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的安全訪問數(shù)據(jù)的方法的流程圖;
圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例的源數(shù)據(jù)加密處理的流程圖;
圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)訪問模塊封裝的流程圖;
圖4是根據(jù)本發(fā)明一個(gè)實(shí)施例的自定義類加載器加載加密數(shù)據(jù)訪問接口的流程圖;
圖5是根據(jù)本發(fā)明一個(gè)實(shí)施例的通過加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)的流程圖;
圖6是根據(jù)本發(fā)明一個(gè)實(shí)施例的安全訪問數(shù)據(jù)的裝置的示意圖。
【具體實(shí)施方式】
[0028]為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和【具體實(shí)施方式】對本發(fā)明作進(jìn)一步詳細(xì)的說明。
[0029]參照圖1,示出了本發(fā)明一種根據(jù)本發(fā)明實(shí)施例的安全訪問數(shù)據(jù)的方法的流程圖,如圖所示,該方法可以包括以下步驟:
SlOl:對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù);
計(jì)算機(jī)網(wǎng)絡(luò)的日益發(fā)達(dá),給人們帶來便利的同時(shí)又帶來許多“麻煩”,例如信息泄漏、信息竊取、數(shù)據(jù)篡改、數(shù)據(jù)刪改增添添、計(jì)算機(jī)病毒等。首先可以對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù),主要目的是解決信息在網(wǎng)絡(luò)傳輸時(shí)被竊取和篡改問題,利用特定加密算法對源數(shù)據(jù)進(jìn)行加密,并生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將加密數(shù)據(jù)以及所述完整性校驗(yàn)字符串對應(yīng)存儲(chǔ)。例如利用AES算法(或用戶自定義加密/解密算法)進(jìn)行信息加密,并用MD5 (或用戶自定義加密/解密算法)算法保證信息的完整性。
[0030]數(shù)據(jù)庫是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲(chǔ)和管理數(shù)據(jù)的倉庫,它已經(jīng)在各大行業(yè)和領(lǐng)域得到推廣和使用,因此,本發(fā)明中源數(shù)據(jù)和加密后得到的數(shù)據(jù)都將存儲(chǔ)在數(shù)據(jù)庫中。如圖2所示,為根據(jù)本發(fā)明實(shí)施例的源數(shù)據(jù)加密處理的流程圖,源數(shù)據(jù)加密處理的流程可以是:
1)獲取數(shù)據(jù):首先從數(shù)據(jù)庫中獲取所有源數(shù)據(jù),判斷是否有數(shù)據(jù)未被加密,如果有則第2)步,否則結(jié)束數(shù)據(jù)加密流程;
2)加密:AES是美國國家標(biāo)準(zhǔn)技術(shù)研究所旨在取代DES的21世紀(jì)的加密標(biāo)準(zhǔn),其加密數(shù)據(jù)塊分組長度必須為128比特,密鑰長度可以是128比特、192比特、256比特中的任意一個(gè)。本發(fā)明中默認(rèn)將采用256比特的密鑰對每條源數(shù)據(jù)進(jìn)行AES加密處理,同時(shí)支持用戶自定義加密/解密算法;
3)生成校驗(yàn)串:為了保證數(shù)據(jù)的信息完整性,數(shù)據(jù)加密模塊默認(rèn)采用MD5算法來解決該問題,此時(shí)會(huì)生成一組MD5字符串,后續(xù)用戶訪問時(shí)數(shù)據(jù)時(shí)將利用該串進(jìn)行MD5校驗(yàn),同時(shí)支持用戶自定義加密/解密算法進(jìn)行串校驗(yàn);
4)保存數(shù)據(jù):最后將加密后的數(shù)據(jù)以及對應(yīng)的校驗(yàn)字符串以〈加密數(shù)據(jù),校驗(yàn)串 > 形式存入加密數(shù)據(jù)庫中。
[0031]S102:將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口 ; 在現(xiàn)有技術(shù)中,由于數(shù)據(jù)訪問模塊并不做任何處理。但數(shù)據(jù)訪問模塊中往往包含一些
保密信息,例如數(shù)據(jù)服務(wù)器鏈接地址、服務(wù)器用戶名、登陸密碼、數(shù)據(jù)訪問策略等,可以將用戶訪問加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口,對數(shù)據(jù)訪問接口中的內(nèi)容進(jìn)行保護(hù),防止由于環(huán)境弱安全問題,數(shù)據(jù)訪問模塊遭人竊取、破譯而導(dǎo)致泄密。
[0032]Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,其具有卓越的通用性、高效性、平臺(tái)移植性和安全性,并廣泛用于各個(gè)領(lǐng)域。本發(fā)明中實(shí)施例中的數(shù)據(jù)訪問模塊的開發(fā)以Java編程語言開發(fā)的數(shù)據(jù)訪問模塊為例進(jìn)行說明。數(shù)據(jù)訪問模塊將會(huì)以Jar包的形式提交給用戶使用。即將訪問加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為Java歸檔文件Jar包形式的加密數(shù)據(jù)訪問接口。
[0033]請參見圖3,為根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)訪問模塊封裝的流程圖,如圖所示,具體在將用戶訪問加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口可以通過如下步驟進(jìn)行:
1)獲取Jar包:讀取和加載待加密Jar包,首先用戶提交Jar包保存路徑,此路徑可以是Jar包的直接路徑,也可以是存放Jar包的文件夾路徑,如果以文件夾形式提交,可以以遞歸遍歷的方式找到該文件夾下所有待加密Jar包;
2)獲取類Class字節(jié)數(shù)組:根據(jù)后綴名分析待加密Jar包中的類文件,讀取待加密Jar包中的類文件,并寫入類字節(jié)數(shù)組,將待加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存。加載Jar包,生成文件壓縮流,分析Jar包中的文件,找到所有以class”格式結(jié)尾的類文件,并讀取類文件內(nèi)容,寫入字節(jié)數(shù)組,并以<? class類名,字節(jié)數(shù)組 > 的Map形式保存;
3)加密Class字節(jié)數(shù)組:利用預(yù)置的加密算法加密各個(gè)類文件對應(yīng)的類字節(jié)數(shù)組;預(yù)置的加密算法包括高級加密標(biāo)準(zhǔn)AES加密算法,或用戶自定義加密算法。和數(shù)據(jù)加密一樣,本模塊也可以采用256比特密鑰的AES算法對Class字節(jié)數(shù)組進(jìn)行加密處理,同時(shí)支持用戶自定義加密/解密算法;
4)生成加密Jar包:初始化類文件流和Jar包壓縮流,將加密后的類字節(jié)數(shù)組內(nèi)容寫回至類文件流,再將所有得到的類文件流寫入至Jar包壓縮流,以Jar包形式存儲(chǔ),生成Jar包形式的加密數(shù)據(jù)訪問接口。具體的,可以是初始化.class文件流和Jar包壓縮流,將加密后的Class字節(jié)數(shù)組內(nèi)容寫回至.class文件流,然后再將所有得到的.class文件流寫入至Jar包壓縮流,最后以Jar包形式存儲(chǔ)。
[0034]S103:在用戶訪問所述加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載所述加密數(shù)據(jù)訪問接口;
由于加密后的數(shù)據(jù)訪問模塊無法被默認(rèn)的運(yùn)行環(huán)境加載,因此該模塊的主要目的便是自定義一套類加載器來解決對加密數(shù)據(jù)訪問接口加載問題,使得用戶能方便、透明地使用數(shù)據(jù)訪問接口對數(shù)據(jù)進(jìn)行訪問。以下仍以Java編程語言開發(fā)的應(yīng)用為例進(jìn)行說明。
[0035]如圖3所示,為使用接口加密密鑰,通過自定義類加載器加載加密數(shù)據(jù)訪問接口的一個(gè)示例的應(yīng)用示意圖。雖然在絕大多數(shù)情況下,Java運(yùn)行環(huán)境下的Java虛擬機(jī)JVM默認(rèn)提供的類加載器已經(jīng)可以滿足需求,但在本發(fā)明實(shí)施例中,出于安全性考慮,數(shù)據(jù)訪問模塊以加密Jar包的形式提供給用戶使用,JVM默認(rèn)加載器此時(shí)可能不能正確地加載該Jar包,因此需要自定義類加載器來解決加密Jar包加載問題。使用接口加密密鑰,通過自定義類加載器加載所述加密數(shù)據(jù)訪問接口的過程可以是:
加載加密數(shù)據(jù)訪問接口的加密Jar包,生成對應(yīng)的壓縮文件流,根據(jù)后綴名分析加密Jar包中的類文件;讀取加密Jar包中的類文件內(nèi)容,并寫入類字節(jié)數(shù)組,將加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存;接收用戶輸入的目標(biāo)類名,并根據(jù)目標(biāo)類名查找Map集合;如果Map集合中存在目標(biāo)類名,則獲取對應(yīng)的目標(biāo)類字節(jié)數(shù)組,并利用接口加密密鑰對目標(biāo)類字節(jié)數(shù)組進(jìn)行解密;將解密后的目標(biāo)類字節(jié)數(shù)組轉(zhuǎn)換為對應(yīng)的類實(shí)例,完成目標(biāo)類名對應(yīng)的類的加載。在這個(gè)過程中,接收用戶輸入的目標(biāo)類名后,可以首先判斷已加載的類中是否包含目標(biāo)類名對應(yīng)的類;若包含則中止該類的重復(fù)加載。此外,在加載的過程中,還可以在加載目標(biāo)類名對應(yīng)的類時(shí),類加載器以向上遞進(jìn)的方式嘗試將加載任務(wù)代理給其父類加載器進(jìn)行加載;其中,如果父類加載器本身還具有父類加載器,則將加載任務(wù)代理給其父類加載器,依次類推,只有當(dāng)父類加載器不能成功加載該類,此時(shí)才會(huì)將該類交還給子類加載,下面結(jié)合圖示以及具體應(yīng)用說明這一過程,如圖4所示,為根據(jù)本發(fā)明實(shí)施例的自定義類加載器加載加密數(shù)據(jù)訪問接口的流程圖,該過程可以包括以下步驟:
1)加載.class:加載加密Jar包,生成壓縮文件流,分析Jar包中的文件,找到所有以.class格式結(jié)尾的類文件,并讀取類文件內(nèi)容,存入字節(jié)數(shù)組,并以<.class類名,字節(jié)數(shù)組 > 的Map形式保存;
2)是否已經(jīng)加載:當(dāng)用戶輸入要加載類名時(shí),類加載器為了避免類重復(fù)加載,模塊首先判斷該類是否曾經(jīng)被加載,如果曾被加載過,則直接返回對應(yīng)的Class類實(shí)例,否則進(jìn)行下一步;
3)父加載器加載:類加載器在嘗試自己去查找某個(gè)類的字節(jié)代碼并定義它時(shí),會(huì)先代理給其父類加載器,由父類加載器先去嘗試加載這個(gè)類,如果父類加載器本身還具有父類加載器,那么同樣會(huì)代理給其父類加載器,依次類推,只有當(dāng)父類加載器不能成功加載該類,此時(shí)才會(huì)將該類交還給子類加載;
4)查找欲加載的.class是否存在于〈.class類名,字節(jié)數(shù)組>Map集合中,如果存在則進(jìn)行下一步;
5)生成Class類實(shí)例:獲得該類對應(yīng)的字節(jié)數(shù)組,由于數(shù)據(jù)訪問模塊被256比特密鑰的AES算法(或用戶自定義的加密/解密算法)加密,因此需要獲得對應(yīng)的密鑰進(jìn)行解密處理,然后再將解密后該類對應(yīng)的字節(jié)數(shù)組轉(zhuǎn)換成Class類實(shí)例,此時(shí),類加載過程完成。
[0036]S104:使用數(shù)據(jù)加密密鑰,通過所述加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)。
[0037]在實(shí)際應(yīng)用匯總,源數(shù)據(jù)以及根據(jù)源數(shù)據(jù)生產(chǎn)的加密數(shù)據(jù)往往保存在異地服務(wù)器中,在本步驟中,可以使用數(shù)據(jù)加密密鑰,通過加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù),使用戶可以通過互聯(lián)網(wǎng)方便、有效、透明地讀取數(shù)據(jù)服務(wù)器中的內(nèi)容。在以Java開發(fā)的應(yīng)用中,該過程具體可以是加載Java數(shù)據(jù)庫連接JDBC驅(qū)動(dòng)程序到Java虛擬機(jī),將驅(qū)動(dòng)類的實(shí)例注冊到驅(qū)動(dòng)管理類中;提供JDBC連接的統(tǒng)一資源定位符URL ;其中URL包括連接數(shù)據(jù)庫所需的協(xié)議,子協(xié)議,以及數(shù)據(jù)源標(biāo)識(shí);其中協(xié)議以字符jdbc開始;子協(xié)議包括橋連接的驅(qū)動(dòng)程序或數(shù)據(jù)庫管理系統(tǒng)名稱;數(shù)據(jù)源標(biāo)識(shí)包括到數(shù)據(jù)庫來源的地址與連接端口 ;創(chuàng)建數(shù)據(jù)庫連接,獲取數(shù)據(jù)庫連接對象,并傳入的連接路徑,用戶以及密碼;接收用戶提交的數(shù)據(jù)庫查詢語句,并接收對應(yīng)的數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)。
[0038]在獲取加密數(shù)據(jù)后,可以對加密數(shù)據(jù)進(jìn)行調(diào)用。當(dāng)然,由于所獲得的是加密的數(shù)據(jù),要想對數(shù)據(jù)進(jìn)行使用,還需要對獲得的加密數(shù)據(jù)進(jìn)行解密處理,另外,在解密前還可以對獲得的數(shù)據(jù)進(jìn)行完整性校驗(yàn),以保證所獲得的數(shù)據(jù)是正確的。利用預(yù)置的校驗(yàn)算法對數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行完整性校驗(yàn),利用預(yù)置的解密算法對數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行解密處理,獲取對應(yīng)的目標(biāo)數(shù)據(jù)。下面結(jié)合圖示以及具體應(yīng)用說明這一過程,如圖4所示,為根據(jù)本發(fā)明實(shí)施例的通過加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)的流程圖,該過程可以包括以下步驟:
1)加載JDBC驅(qū)動(dòng)程序:在連接數(shù)據(jù)庫之前,首先要加載想要連接的數(shù)據(jù)庫驅(qū)動(dòng)到JVM(Java虛擬機(jī)),成功加載后,會(huì)將驅(qū)動(dòng)類的實(shí)例注冊到驅(qū)動(dòng)管理類中;
2)提供JDBC連接的URL:連接URL定義了連接數(shù)據(jù)庫時(shí)的協(xié)議、子協(xié)議、數(shù)據(jù)源標(biāo)識(shí)。(協(xié)議:在JDBC中總是以jdbc開始,子協(xié)議:是橋連接的驅(qū)動(dòng)程序或是數(shù)據(jù)庫管理系統(tǒng)名稱,數(shù)據(jù)源標(biāo)識(shí):標(biāo)記找到數(shù)據(jù)庫來源的地址與連接端口);
3)創(chuàng)建數(shù)據(jù)庫的連接:獲得數(shù)據(jù)庫連接對象,此時(shí)需要傳入數(shù)據(jù)庫的連接路徑、數(shù)據(jù)庫用戶名和密碼;
4)獲得、處理數(shù)據(jù):接收用戶提交的SQL查詢語句,此時(shí)會(huì)獲得對應(yīng)的數(shù)據(jù)結(jié)果集,由于數(shù)據(jù)事先被數(shù)據(jù)加密模塊加密,因此還需要利用AES密鑰(或用戶自定義的加密/解密算法密鑰)進(jìn)行解密,并且利用MD5串做MD5校驗(yàn)(或用戶自定義的加密/解密算法進(jìn)行串校驗(yàn))以保證數(shù)據(jù)的完整性;
5)關(guān)閉JDBC對象:操作完成以后要把所有使用的JDBC對象全都關(guān)閉,以釋放JDBC資源,先關(guān)閉記錄集,再關(guān)閉聲明,最后關(guān)閉連接對象。
[0039]以上對本發(fā)明實(shí)施例提供的安全訪問數(shù)據(jù)的方法進(jìn)行了詳細(xì)的介紹,通過該方法,可以對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù);將用戶訪問加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口 ;在用戶訪問加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載加密數(shù)據(jù)訪問接口 ;進(jìn)而使用數(shù)據(jù)加密密鑰,通過加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)。通過本發(fā)明提供了一種在弱安全環(huán)境下對數(shù)據(jù)安全訪問的方法,可以從后端的數(shù)據(jù)存儲(chǔ)到前端的數(shù)據(jù)訪問都給出了一個(gè)有效的解決方法;其次,不需要任何加密設(shè)備投入,能有效控制成本;第三,用戶使用高效、便利、安全,學(xué)習(xí)成本低,使用簡單,適用于各種弱安全環(huán)境。
[0040]與本發(fā)明實(shí)施例提供的安全訪問數(shù)據(jù)的方法相對應(yīng),本發(fā)明實(shí)施例還提供了一種安全訪問數(shù)據(jù)的裝置,請參見圖6,是根據(jù)本發(fā)明實(shí)施例的安全訪問數(shù)據(jù)的裝置的示意圖,如圖所示,該裝置可以包括:
數(shù)據(jù)加密模塊601,用于對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù);
接口加密模塊602,用于將用戶訪問加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口 ;
接口加載模塊603,用于在用戶訪問加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載加密數(shù)據(jù)訪問接口;
數(shù)據(jù)獲取模塊604,用于使用數(shù)據(jù)加密密鑰,通過加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)。
[0041]其中,該安全訪問數(shù)據(jù)的裝置的數(shù)據(jù)加密模塊601可以包括:
數(shù)據(jù)加密子模塊,用于利用特定加密算法對源數(shù)據(jù)進(jìn)行加密,并生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將加密數(shù)據(jù)以及完整性校驗(yàn)字符串對應(yīng)存儲(chǔ)。
[0042]其中,數(shù)據(jù)加密子模塊具體可以用于:
獲取源數(shù)據(jù),并利用高級加密標(biāo)準(zhǔn)AES加密算法,或用戶自定義加密算法對源數(shù)據(jù)進(jìn)行加密;并利用消息摘要算法第五版MD5算法,或用戶自定義校驗(yàn)算法生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將加密數(shù)據(jù)以及完整性校驗(yàn)字符串對應(yīng)存儲(chǔ)。
[0043]在另一種實(shí)現(xiàn)方式下接口加密模塊可以包括:
接口加密子模塊,用于將用戶訪問加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為Java歸檔文件Jar包形式的加密數(shù)據(jù)訪問接口。
[0044]其中,接口加密子模塊具體可以用于:
讀取和加載待加密Jar包,根據(jù)后綴名分析待加密Jar包中的類文件;
讀取待加密Jar包中的類文件,并寫入類字節(jié)數(shù)組,將待加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存;
利用預(yù)置的加密算法加密各個(gè)類文件對應(yīng)的類字節(jié)數(shù)組;預(yù)置的加密算法包括高級加密標(biāo)準(zhǔn)AES加密算法,或用戶自定義加密算法;以及,
初始化類文件流和Jar包壓縮流,將加密后的類字節(jié)數(shù)組內(nèi)容寫回至類文件流,再將所有得到的類文件流寫入至Jar包壓縮流,以Jar包形式存儲(chǔ),生成Jar包形式的加密數(shù)據(jù)訪問接口。
[0045]此外,安全訪問數(shù)據(jù)的裝置中的接口加載模塊602具體可以用于:
加載加密數(shù)據(jù)訪問接口的加密Jar包,生成對應(yīng)的壓縮文件流,根據(jù)后綴名分析加密Jar包中的類文件;
讀取加密Jar包中的類文件內(nèi)容,并寫入類字節(jié)數(shù)組,將加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存;
接收用戶輸入的目標(biāo)類名,并根據(jù)目標(biāo)類名查找Map集合;
如果Map集合中存在目標(biāo)類名,則獲取對應(yīng)的目標(biāo)類字節(jié)數(shù)組,并利用接口加密密鑰對目標(biāo)類字節(jié)數(shù)組進(jìn)行解密;
將解密后的目標(biāo)類字節(jié)數(shù)組轉(zhuǎn)換為對應(yīng)的類實(shí)例,完成目標(biāo)類名對應(yīng)的類的加載。
[0046]在又一種實(shí)現(xiàn)方式下,安全訪問數(shù)據(jù)的裝置還可以包括:
重復(fù)加載檢測單元,用于接收用戶輸入的目標(biāo)類名,判斷已加載的類中是否包含目標(biāo)類名對應(yīng)的類;若包含則中止該類的重復(fù)加載。
[0047]此外該安全訪問數(shù)據(jù)的裝置還可以包括:
父類委托單元,用于在加載目標(biāo)類名對應(yīng)的類時(shí),類加載器以向上遞進(jìn)的方式嘗試將加載任務(wù)代理給其父類加載器進(jìn)行加載;其中,如果父類加載器本身還具有父類加載器,則將加載任務(wù)代理給其父類加載器,依次類推,只有當(dāng)父類加載器不能成功加載該類,此時(shí)才會(huì)將該類交還給子類加載。
[0048]再一種實(shí)現(xiàn)方式下,該安全訪問數(shù)據(jù)的裝置中的數(shù)據(jù)獲取模塊604具體可以用于:
加載Java數(shù)據(jù)庫連接JDBC驅(qū)動(dòng)程序到Java虛擬機(jī),將驅(qū)動(dòng)類的實(shí)例注冊到驅(qū)動(dòng)管理類中;
提供JDBC連接的統(tǒng)一資源定位符URL ;其中URL包括連接數(shù)據(jù)庫所需的協(xié)議,子協(xié)議,以及數(shù)據(jù)源標(biāo)識(shí);其中協(xié)議以字符jdbc開始;子協(xié)議包括橋連接的驅(qū)動(dòng)程序或數(shù)據(jù)庫管理系統(tǒng)名稱;數(shù)據(jù)源標(biāo)識(shí)包括到數(shù)據(jù)庫來源的地址與連接端口 ;
創(chuàng)建數(shù)據(jù)庫連接,獲取數(shù)據(jù)庫連接對象,并傳入的連接路徑,用戶以及密碼;
接收用戶提交的數(shù)據(jù)庫查詢語句,并接收對應(yīng)的數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)。
[0049]在這種實(shí)現(xiàn)方式下,該安全訪問數(shù)據(jù)的裝置還可以包括:
完整性校驗(yàn)?zāi)K,用于利用預(yù)置的校驗(yàn)算法對數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行完整性校驗(yàn);預(yù)置的校驗(yàn)算法包括消息摘要算法第五版MD5算法,或用戶自定義校驗(yàn)算法;數(shù)據(jù)解密模塊,用于利用預(yù)置的解密算法對數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行解密處理,獲取對應(yīng)的目標(biāo)數(shù)據(jù)。預(yù)置的解密算法包括AES加密算法,或用戶自定義加密算法。
[0050]以上對本發(fā)明實(shí)施例提供的安全訪問數(shù)據(jù)的裝置進(jìn)行了詳細(xì)的介紹,通過該裝置,可以從后端的數(shù)據(jù)存儲(chǔ)到前端的數(shù)據(jù)訪問都給出了一個(gè)有效的解決方法;其次,不需要任何加密設(shè)備投入,能有效控制成本,使用高效、便利、安全,學(xué)習(xí)成本低,使用簡單,適用于各種弱安全環(huán)境。
[0051]對于前述的各方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域的技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)楦鶕?jù)本發(fā)明,某些步驟可以采用其他順去或同時(shí)執(zhí)行;其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,上述方法實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。
[0052]對于前述的各裝置實(shí)施例,為了簡單描述,故將其都表述為一系列的單元組合,但是本領(lǐng)域的技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的單元組合的限制,因?yàn)楦鶕?jù)本發(fā)明,某些單元可以采用其他單元執(zhí)行;其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,上述裝置實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的單元并不一定是本發(fā)明所必須的。
[0053]本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對于系統(tǒng)實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
[0054]以上對本發(fā)明所提供的一種安全訪問數(shù)據(jù)的方法及裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
【權(quán)利要求】
1.一種安全訪問數(shù)據(jù)的方法,其特征在于,包括: 對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù); 將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口; 在用戶訪問所述加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載所述加密數(shù)據(jù)訪問接口; 使用數(shù)據(jù)加密密鑰,通過所述加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的安全訪問數(shù)據(jù)的方法,其特征在于,所述對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù),包括: 利用特定加密算法對源數(shù)據(jù)進(jìn)行加密,并生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將所述加密數(shù)據(jù)以及所述完整性校驗(yàn)字符串對應(yīng)存儲(chǔ)。
3.根據(jù)權(quán)利要求2所述的安全訪問數(shù)據(jù)的方法,其特征在于,所述利用特定加密算法對源數(shù)據(jù)進(jìn)行加密,并生成加密數(shù)據(jù)的完整性校驗(yàn)字符串,將所述加密數(shù)據(jù)以及所述完整性校驗(yàn)字符串對應(yīng)存儲(chǔ),包括: 獲取所述源數(shù)據(jù),并利用高級加密標(biāo)準(zhǔn)AES加密算法,或用戶自定義加密算法對源數(shù)據(jù)進(jìn)行加密;并利用消息摘要算法第五版MD5算法,或用戶自定義校驗(yàn)算法生成加密數(shù)據(jù)的完整性校驗(yàn)字符串, 將所述加密數(shù)據(jù)以及所述完整性校驗(yàn)字符串對應(yīng)存儲(chǔ)。
4.根據(jù)權(quán)利要求1任一項(xiàng)所述的安全訪問數(shù)據(jù)的方法,其特征在于,所述將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口,包括: 將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為Java歸檔文件Jar包形式的加密數(shù)據(jù)訪問接口。
5.根據(jù)權(quán)利要求4所述的安全訪問數(shù)據(jù)的方法,其特征在于,所述將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為Java歸檔文件Jar包形式的加密數(shù)據(jù)訪問接口,包括: 讀取和加載待加密Jar包,根據(jù)后綴名分析待加密Jar包中的類文件; 讀取待加密Jar包中的類文件,并寫入類字節(jié)數(shù)組,將待加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存; 利用預(yù)置的加密算法加密所述各個(gè)類文件對應(yīng)的類字節(jié)數(shù)組;所述預(yù)置的加密算法包括高級加密標(biāo)準(zhǔn)AES加密算法,或用戶自定義加密算法; 初始化類文件流和Jar包壓縮流,將加密后的類字節(jié)數(shù)組內(nèi)容寫回至類文件流,再將所有得到的類文件流寫入至Jar包壓縮流,以Jar包形式存儲(chǔ),生成Jar包形式的加密數(shù)據(jù)訪問接口。
6.根據(jù)權(quán)利要求4所述的安全訪問數(shù)據(jù)的方法,其特征在于,所述在用戶訪問所述加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載所述加密數(shù)據(jù)訪問接口,包括: 加載所述加密數(shù)據(jù)訪問接口的加密Jar包,生成對應(yīng)的壓縮文件流,根據(jù)后綴名分析加密Jar包中的類文件; 讀取加密Jar包中的類文件內(nèi)容,并寫入類字節(jié)數(shù)組,將加密Jar包中的各個(gè)類文件的類名與對應(yīng)的類字節(jié)數(shù)組以地圖Map集合的形式保存; 接收用戶輸入的目標(biāo)類名,并根據(jù)所述目標(biāo)類名查找所述Map集合; 如果所述Map集合中存在所述目標(biāo)類名,則獲取對應(yīng)的目標(biāo)類字節(jié)數(shù)組,并利用所述接口加密密鑰對所述目標(biāo)類字節(jié)數(shù)組進(jìn)行解密;將解密后的目標(biāo)類字節(jié)數(shù)組轉(zhuǎn)換為對應(yīng)的類實(shí)例,完成所述目標(biāo)類名對應(yīng)的類的加載。
7.根據(jù)權(quán)利要求6所述的安全訪問數(shù)據(jù)的方法,其特征在于,還包括: 接收用戶輸入的目標(biāo)類名,判斷已加載的類中是否包含所述目標(biāo)類名對應(yīng)的類;若包含則中止該類的重復(fù)加載。
8.根據(jù)權(quán)利要求6所述的安全訪問數(shù)據(jù)的方法,其特征在于,還包括: 在加載所述目標(biāo)類名對應(yīng)的類時(shí),類加載器以向上遞進(jìn)的方式嘗試將加載任務(wù)代理給其父類加載器進(jìn)行加載;其中,如果父類加載器本身還具有父類加載器,則將加載任務(wù)代理給其父類加載器,依次類推,只有當(dāng)父類加載器不能成功加載該類,此時(shí)才會(huì)將該類交還給子類加載。
9.根據(jù)權(quán)利要求1-8所述的安全訪問數(shù)據(jù)的方法,其特征在于,所述使用數(shù)據(jù)加密密鑰,通過所述加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù),包括: 加載Java數(shù)據(jù)庫連接JDBC驅(qū)動(dòng)程序到Java虛擬機(jī),將驅(qū)動(dòng)類的實(shí)例注冊到驅(qū)動(dòng)管理類中; 提供JDBC連接的統(tǒng)一資源定位符URL ;其中所述URL包括連接數(shù)據(jù)庫所需的協(xié)議,子協(xié)議,以及數(shù)據(jù)源標(biāo)識(shí);其中所述協(xié)議以字符jdbc開始;所述子協(xié)議包括橋連接的驅(qū)動(dòng)程序或數(shù)據(jù)庫管理系統(tǒng)名稱;所述數(shù)據(jù)源標(biāo)識(shí)包括到數(shù)據(jù)庫來源的地址與連接端口 ; 創(chuàng)建數(shù)據(jù)庫連接,獲取數(shù)據(jù)庫連接對象,并傳入的連接路徑,用戶以及密碼; 接收用戶提交的數(shù)據(jù)庫查詢語句,并接收對應(yīng)的數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)。
10.根據(jù)權(quán)利要求9所述的安全訪問數(shù)據(jù)的方法,其特征在于,還包括: 利用預(yù)置的校驗(yàn)算法對所述數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行完整性校驗(yàn);所述預(yù)置的校驗(yàn)算法包括消息摘要算法第五版MD5算法,或用戶自定義校驗(yàn)算法; 利用預(yù)置的解密算法對所述數(shù)據(jù)結(jié)果集中包含的加密數(shù)據(jù)進(jìn)行解密處理,獲取對應(yīng)的目標(biāo)數(shù)據(jù); 所述預(yù)置的解密算法包括AES加密算法,或用戶自定義加密算法。
11.一種安全訪問數(shù)據(jù)的裝置,其特征在于,包括: 數(shù)據(jù)加密模塊,用于對源數(shù)據(jù)進(jìn)行加密,將源數(shù)據(jù)封裝為加密數(shù)據(jù); 接口加密模塊,用于將用戶訪問所述加密數(shù)據(jù)使用的數(shù)據(jù)訪問模塊封裝為加密數(shù)據(jù)訪問接口 ; 接口加載模塊,用于在用戶訪問所述加密數(shù)據(jù)時(shí),使用接口加密密鑰,通過自定義類加載器加載所述加密數(shù)據(jù)訪問接口; 數(shù)據(jù)獲取模塊,用于使用數(shù)據(jù)加密密鑰,通過所述加密數(shù)據(jù)訪問接口獲得加密數(shù)據(jù)。
【文檔編號】H04L9/18GK103647636SQ201310748951
【公開日】2014年3月19日 申請日期:2013年12月31日 優(yōu)先權(quán)日:2013年12月31日
【發(fā)明者】伏峰, 章正道, 林勝通 申請人:廈門市美亞柏科信息股份有限公司