亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

數(shù)據(jù)庫(kù)的操作方法及裝置的制造方法_3

文檔序號(hào):9631547閱讀:來源:國(guó)知局
[0057]步驟S304:使用擴(kuò)展的框架層數(shù)據(jù)庫(kù)讀寫接口讀寫數(shù)據(jù)庫(kù);
[0058]其中擴(kuò)展的框架層數(shù)據(jù)庫(kù)讀寫接口,是通過在Android原生的數(shù)據(jù)庫(kù)讀寫接口中添加跳轉(zhuǎn)代碼,將調(diào)用讀寫流程切換到擴(kuò)展而來,應(yīng)用層不關(guān)注底層的數(shù)據(jù)庫(kù)是否加密,它們調(diào)用的接口都Android原生的數(shù)據(jù)庫(kù)讀寫接口。
[0059]步驟S306:生成數(shù)據(jù)庫(kù)密鑰;
[0060]讀取手機(jī)中可以唯一標(biāo)識(shí)手機(jī)的特征碼,使用指定的加密算法生成數(shù)據(jù)庫(kù)的密鑰,用于創(chuàng)建和打開數(shù)據(jù)庫(kù)。
[0061]標(biāo)識(shí)手機(jī)的唯一特征碼包括但不限于手機(jī)串號(hào)、藍(lán)牙、Wifi地址等,只要能夠持續(xù)且唯一標(biāo)識(shí)當(dāng)前手機(jī)即可。
[0062]加密算法可以使用任意一種能夠保護(hù)密鑰的加密算法,此處的加密算法是保證數(shù)據(jù)庫(kù)安全的特性之一。
[0063]為了使用方便和提高數(shù)據(jù)庫(kù)的操作效率,生成密鑰的動(dòng)作可以在手機(jī)開機(jī)的時(shí)候生成并保存,每次讀取數(shù)據(jù)庫(kù)的時(shí)候直接獲取并使用,但必須保證生成的密鑰的安全性,防止被非法代碼獲取。
[0064]步驟S308:檢查數(shù)據(jù)庫(kù)是否已創(chuàng)建,檢查數(shù)據(jù)庫(kù)已創(chuàng)建時(shí),執(zhí)行步驟S312,檢查數(shù)據(jù)庫(kù)未創(chuàng)建時(shí),執(zhí)行步驟S310 ;
[0065]實(shí)際Android系統(tǒng)中創(chuàng)建數(shù)據(jù)庫(kù)是在數(shù)據(jù)讀寫前是由專門的操作執(zhí)行,這里檢查數(shù)據(jù)庫(kù)是否已創(chuàng)建是為了描述方便加入的步驟,目的是為了更加清晰的描述本發(fā)明的思路。
[0066]步驟S310:創(chuàng)建數(shù)據(jù)庫(kù)并設(shè)置數(shù)據(jù)庫(kù)的安全密鑰;
[0067]步驟S312:數(shù)據(jù)庫(kù)設(shè)置密鑰試圖打開數(shù)據(jù)庫(kù);
[0068]步驟S314:判斷數(shù)據(jù)庫(kù)安全模塊驗(yàn)證設(shè)置的密鑰是否正確,正確的情況下,執(zhí)行步驟S316,不正確的情況下,執(zhí)行步驟S318 ;
[0069]其中數(shù)據(jù)庫(kù)安全模塊負(fù)責(zé)數(shù)據(jù)庫(kù)的安全性驗(yàn)證(密鑰校驗(yàn))、數(shù)據(jù)庫(kù)自身或數(shù)據(jù)庫(kù)內(nèi)容的加/解密。
[0070]其中數(shù)據(jù)庫(kù)安全模塊可以是處于數(shù)據(jù)庫(kù)外部與Android數(shù)據(jù)庫(kù)操作框架之間的單獨(dú)功能模塊,也可以是應(yīng)用數(shù)據(jù)庫(kù)自身特性嵌入到數(shù)據(jù)庫(kù)內(nèi)部的功能模塊,或者是結(jié)合了上述兩者特性既有數(shù)據(jù)庫(kù)內(nèi)部安全的交互模塊,只要能滿足保證數(shù)據(jù)庫(kù)數(shù)據(jù)內(nèi)容的安全性能要求即可。
[0071]其中驗(yàn)證密鑰是否正確,數(shù)據(jù)庫(kù)安全模塊根據(jù)密鑰正確與否決定數(shù)據(jù)庫(kù)是否允許被打開以便讀寫數(shù)據(jù)。
[0072]步驟S316:正常打開數(shù)據(jù)庫(kù),可向數(shù)據(jù)庫(kù)讀寫數(shù)據(jù);
[0073]其中向數(shù)據(jù)庫(kù)讀寫數(shù)據(jù),如數(shù)據(jù)庫(kù)安全模塊加密的對(duì)象是數(shù)據(jù)庫(kù)本身,則數(shù)據(jù)庫(kù)安全模塊需對(duì)數(shù)據(jù)庫(kù)文件本身進(jìn)行解密,并負(fù)責(zé)將應(yīng)用層請(qǐng)求的數(shù)據(jù)寫入/讀出;如數(shù)據(jù)庫(kù)安全模塊加密的對(duì)象是數(shù)據(jù)庫(kù)數(shù)據(jù)內(nèi)容,則數(shù)據(jù)庫(kù)安全模塊需對(duì)應(yīng)用層請(qǐng)求的寫輸入數(shù)據(jù)進(jìn)行加密并存入數(shù)據(jù)庫(kù);對(duì)應(yīng)用層請(qǐng)求讀出的數(shù)據(jù),從數(shù)據(jù)庫(kù)讀出后需解密為明文,再提供給應(yīng)用層。
[0074]不論是對(duì)數(shù)據(jù)庫(kù)文件自身加密還是對(duì)存入數(shù)據(jù)庫(kù)的數(shù)據(jù)內(nèi)容進(jìn)行加密,都需要能夠有效防止數(shù)據(jù)庫(kù)內(nèi)容被非法讀取和識(shí)別。
[0075]步驟S318:打開數(shù)據(jù)庫(kù)失敗,拒絕讀寫數(shù)據(jù);
[0076]其中打開數(shù)據(jù)庫(kù)失敗,拒絕讀寫數(shù)據(jù),會(huì)通過Android框架層將錯(cuò)誤的讀寫返回到應(yīng)用層供處理。
[0077]需要闡明的是,Android系統(tǒng)對(duì)數(shù)據(jù)庫(kù)的讀寫時(shí),不是每次都要打開數(shù)據(jù)庫(kù),而是在讀寫數(shù)據(jù)前打開數(shù)據(jù)庫(kù),完成后再關(guān)閉數(shù)據(jù)庫(kù)。上面的步驟和流程只是為了闡述本發(fā)明的思路,不應(yīng)將之作為Android系統(tǒng)下的數(shù)據(jù)庫(kù)讀寫流程對(duì)待。使用Android系統(tǒng)的正常數(shù)據(jù)庫(kù)操作流程操作加密數(shù)據(jù)庫(kù)的流程和步驟,亦在本發(fā)明的保護(hù)范圍之內(nèi)。
[0078]SQLite數(shù)據(jù)庫(kù)加密是通過SQLite數(shù)據(jù)庫(kù)預(yù)留的數(shù)據(jù)庫(kù)加密接口方式來實(shí)現(xiàn)的,SQLite的3.7版本預(yù)留的加密接口如下:
[0079](1):sqlite3_key():指定數(shù)據(jù)庫(kù)使用的密鑰。
[0080](2):sqlite3_rekey():為數(shù)據(jù)庫(kù)重新設(shè)定密鑰用于為數(shù)據(jù)庫(kù)重新設(shè)定密鑰。
[0081](3):sqlite3CodecGetKey():返回?cái)?shù)據(jù)庫(kù)的當(dāng)前密鑰。
[0082](4):sqlite3CodecAttach():將密鑰及頁(yè)面編碼函數(shù)與數(shù)據(jù)庫(kù)進(jìn)行關(guān)聯(lián)。
[0083]上面的加密接口只是提供了數(shù)據(jù)庫(kù)加解密的特性,還需要單獨(dú)提供對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的加/解密及數(shù)據(jù)庫(kù)頁(yè)面編碼等輔助接口,并通過sqlite3CodecAttach與SQLite數(shù)據(jù)庫(kù)關(guān)聯(lián),實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的加密功能。
[0084]對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的加/解密接口,可以使用任意一種能夠保證數(shù)據(jù)安全性的加/解密算法。但是加/解密算法需要注意運(yùn)行效率,過于復(fù)雜的加/解密算法雖然能夠提供更好的數(shù)據(jù)安全性能,但會(huì)拖累數(shù)據(jù)庫(kù)及手機(jī)的運(yùn)行速度,影響用戶體驗(yàn)。
[0085]另外,在另一個(gè)優(yōu)選實(shí)施例中,因?yàn)樗袛?shù)據(jù)庫(kù)都使用統(tǒng)一的密鑰且在同一臺(tái)手機(jī)上唯一,沒有數(shù)據(jù)庫(kù)密鑰重設(shè)的需求,sqlite3_rekey接口可以不用實(shí)現(xiàn)。
[0086]圖4是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)庫(kù)的操作業(yè)務(wù)流程流程圖,如圖4所示,該流程包括如下步驟:
[0087]步驟S402:創(chuàng)建數(shù)據(jù)庫(kù);
[0088]其中創(chuàng)建數(shù)據(jù)庫(kù)的操作由應(yīng)用層發(fā)起。
[0089]步驟S404:設(shè)置數(shù)據(jù)庫(kù)密鑰;
[0090]其中設(shè)置數(shù)據(jù)庫(kù)密鑰由Android數(shù)據(jù)庫(kù)框架的讀寫接口擴(kuò)展來設(shè)置,設(shè)置的密鑰由步驟S306生成,應(yīng)用層不需干預(yù)。
[0091 ] 步驟S406:提供密鑰連接數(shù)據(jù)庫(kù);
[0092]其中提供密鑰連接數(shù)據(jù)庫(kù)由Android數(shù)據(jù)庫(kù)框架的讀寫接口擴(kuò)展執(zhí)行,設(shè)置的密鑰由步驟S306生成,應(yīng)用層不需干預(yù)。
[0093]步驟S408:驗(yàn)證密鑰是否正確,密鑰正確的情況下,執(zhí)行步驟S410,密鑰不正確的情況下,執(zhí)行步驟S416;
[0094]其中驗(yàn)證密鑰是否正確由SQLitem數(shù)據(jù)庫(kù)加密擴(kuò)展接口執(zhí)行,并根據(jù)驗(yàn)證結(jié)果決定數(shù)據(jù)庫(kù)是否可以被打開,以便讀寫數(shù)據(jù)。
[0095]步驟S410:正常打開數(shù)據(jù)庫(kù);
[0096]其中打開數(shù)據(jù)庫(kù),和Android原生接口操作數(shù)據(jù)庫(kù)類似,向應(yīng)用層返回一個(gè)數(shù)據(jù)庫(kù)連接,在關(guān)閉數(shù)據(jù)庫(kù)連接前,應(yīng)用層可不需再次驗(yàn)證密鑰直接使用該連接向數(shù)據(jù)庫(kù)中讀寫數(shù)據(jù)。
[0097]步驟S412:向數(shù)據(jù)庫(kù)讀/寫數(shù)據(jù),并對(duì)讀/寫數(shù)據(jù)內(nèi)容進(jìn)行解密/加密;
[0098]其中對(duì)讀/寫數(shù)據(jù)內(nèi)容進(jìn)行解密/加密,由SQLite數(shù)據(jù)庫(kù)加密擴(kuò)展接口在SQLite數(shù)據(jù)庫(kù)內(nèi)部執(zhí)行,Android數(shù)據(jù)庫(kù)框架讀寫接口,讀/寫的都是明文數(shù)據(jù)。
[0099]步驟S414:數(shù)據(jù)讀寫完成,關(guān)閉數(shù)據(jù)庫(kù);
[0100]其中關(guān)閉數(shù)據(jù)庫(kù)由應(yīng)用層發(fā)起,數(shù)據(jù)庫(kù)關(guān)閉后,步驟S410打開的數(shù)據(jù)庫(kù)連接也被關(guān)閉,后續(xù)再需要向數(shù)據(jù)庫(kù)寫入數(shù)據(jù),應(yīng)再出執(zhí)行步驟S410,以獲取數(shù)據(jù)庫(kù)連接。
[0101]步驟S416:數(shù)據(jù)庫(kù)打開失敗,拒絕讀寫。
[0102]其中數(shù)據(jù)庫(kù)打開失敗,通過Android數(shù)據(jù)庫(kù)框架讀寫接口返回給應(yīng)用層,告知操作結(jié)果。
[0103]圖5是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)庫(kù)密鑰生成的業(yè)務(wù)流程圖,如圖5所示,該流程包括如下步驟:
[0104]
當(dāng)前第3頁(yè)1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1