日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

spatialite android,一种基于Android系统的Spatialite空间数据库加密方法与流程

發(fā)布時(shí)間:2024/1/18 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spatialite android,一种基于Android系统的Spatialite空间数据库加密方法与流程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本發(fā)明屬于數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,具體涉及一種基于Android系統(tǒng)的Spatialite空間數(shù)據(jù)庫(kù)加密方法。

背景技術(shù):

隨著經(jīng)濟(jì)建設(shè)及智能終端和移動(dòng)GIS技術(shù)的不斷發(fā)展,終端的CPU、GPU、內(nèi)存、顯示屏、攝像頭、移動(dòng)GPS芯片、存儲(chǔ)等硬件性能及集成化越來(lái)越高,很多開(kāi)源數(shù)據(jù)庫(kù)和GIS軟件都支持移動(dòng)端應(yīng)用。Spatialite是基于SQLite開(kāi)源數(shù)據(jù)庫(kù)引擎擴(kuò)展而成的一個(gè)簡(jiǎn)單、實(shí)用的輕量級(jí)空間數(shù)據(jù)庫(kù),遵守ACID(Atomicity-原子性、Consistency-一致性、Isolation-隔離性、Durability-持久性)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)特性和OGC標(biāo)準(zhǔn),支持跨平臺(tái)空間數(shù)據(jù)操作,通過(guò)Geometry類型字段能方便有效地組織管理點(diǎn)、線、面等各種類型的空間數(shù)據(jù),為移動(dòng)端的屬性數(shù)據(jù)、空間數(shù)據(jù)的一體化管理與應(yīng)用提供了一種非常好的解決方案,Spatialite提供了AsText、GeomFromText、Intersects、Relate、Distance、Covers、Overlaps、Gunion等空間操作和分析函數(shù),已廣泛應(yīng)用于地理國(guó)情調(diào)查、國(guó)土資源執(zhí)法監(jiān)察、林業(yè)調(diào)查等行業(yè)。

基于GIS數(shù)據(jù)建立的各類應(yīng)用系統(tǒng),其數(shù)據(jù)具有敏感性、重要性,而移動(dòng)終端在帶來(lái)便攜的同時(shí),移動(dòng)端數(shù)據(jù)具有易丟失、易受攻擊等安全問(wèn)題。同時(shí),攻擊者可能會(huì)利用操作系統(tǒng)或數(shù)據(jù)庫(kù)漏洞,或物理接觸移動(dòng)終端和數(shù)據(jù)庫(kù)系統(tǒng)文件,從而可能繞過(guò)身份認(rèn)證和存取控制而直接竊取或篡改數(shù)據(jù)庫(kù)內(nèi)容。因此,移動(dòng)終端應(yīng)用系統(tǒng)的數(shù)據(jù)安全顯得尤為重要和突出,對(duì)數(shù)據(jù)庫(kù)及其數(shù)據(jù)進(jìn)行加密是防范攻擊威脅的有效手段,必須在確保數(shù)據(jù)安全和保護(hù)的條件下才能廣泛開(kāi)展各類應(yīng)用。目前,移動(dòng)終端應(yīng)用系統(tǒng)的數(shù)據(jù)安全主要依靠數(shù)據(jù)加解密方法實(shí)現(xiàn),主要有兩種方式:一是對(duì)數(shù)據(jù)庫(kù)里的數(shù)據(jù)內(nèi)容加密;二是利用數(shù)據(jù)庫(kù)是獨(dú)立文件的特性對(duì)整個(gè)數(shù)據(jù)庫(kù)文件進(jìn)行加密。上述兩種方式存在以下問(wèn)題:

(1)方式一加密后的數(shù)據(jù)不能直接進(jìn)行數(shù)據(jù)查詢、分析和統(tǒng)計(jì),要實(shí)現(xiàn)數(shù)據(jù)查詢、分析、統(tǒng)計(jì)等功能,必須先對(duì)數(shù)據(jù)內(nèi)容進(jìn)行解密或轉(zhuǎn)換;

(2)方式二的資源占用率高,一是在建立數(shù)據(jù)庫(kù)連接時(shí),必須對(duì)加密數(shù)據(jù)庫(kù)文件先進(jìn)行解密,解密數(shù)據(jù)庫(kù)的過(guò)程是CPU占用率高的過(guò)程;二是解密數(shù)據(jù)庫(kù)需占用數(shù)據(jù)庫(kù)文件相當(dāng)?shù)拇鎯?chǔ)空間,對(duì)移動(dòng)端的存儲(chǔ)容量有較高要求;三是在關(guān)閉數(shù)據(jù)庫(kù)時(shí),為保障數(shù)據(jù)安全,必須刪除解密后的數(shù)據(jù)庫(kù);四是在打開(kāi)數(shù)據(jù)庫(kù)后、關(guān)閉數(shù)據(jù)庫(kù)前的數(shù)據(jù)庫(kù)應(yīng)用過(guò)程中,非授權(quán)用戶完全可以通過(guò)復(fù)制、竊取等非法手段獲得解密后的數(shù)據(jù)庫(kù),存在非常大的安全隱患;五是資源占用率與數(shù)據(jù)庫(kù)文件大小呈強(qiáng)正相關(guān)關(guān)系,即數(shù)據(jù)庫(kù)中的數(shù)據(jù)量越大資源占用率越高、使用效果就越差。

現(xiàn)階段,尚無(wú)專門針對(duì)Spatialite空間數(shù)據(jù)庫(kù)實(shí)現(xiàn)加密解密的API接口,現(xiàn)有研究主要集中在SQLite的數(shù)據(jù)庫(kù)加密功能的研究和應(yīng)用。

技術(shù)實(shí)現(xiàn)要素:

針對(duì)現(xiàn)有技術(shù)中的上述不足,本發(fā)明公開(kāi)了一種接口使用簡(jiǎn)單、資源占用率低的基于Android系統(tǒng)的Spatialite空間數(shù)據(jù)庫(kù)加密方法,解決了現(xiàn)有技術(shù)中的不能直接對(duì)加密后的Sqlite空間數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)查詢、分析和統(tǒng)計(jì)等常用操作的問(wèn)題,并且解決了加密后的Sqlite空間數(shù)據(jù)庫(kù)使用復(fù)雜和資源占用率高的問(wèn)題;廣泛應(yīng)用于自然資源調(diào)查、地理國(guó)情調(diào)查、國(guó)土資源執(zhí)法監(jiān)察和林業(yè)調(diào)查等行業(yè)。

為了達(dá)到上述發(fā)明目的,本發(fā)明采用的技術(shù)方案為:

一種基于Android系統(tǒng)的Spatialite空間數(shù)據(jù)庫(kù)加密方法,包括如下步驟:

S1:搭建NDK編譯環(huán)境,即搭建安裝Spatialite空間數(shù)據(jù)庫(kù)所需的NDK編譯環(huán)境;

S2:下載資源及代碼,即下載安裝Spatialite空間數(shù)據(jù)庫(kù)編譯所需的資源及代碼;

S3:確定加密模型,即確定對(duì)Spatialite空間數(shù)據(jù)庫(kù)進(jìn)行加密的模型;

S4:選擇加密算法,即根據(jù)步驟S3確定的加密模型,選擇對(duì)Spatialite空間數(shù)據(jù)庫(kù)進(jìn)行加密的算法;

S5:管理密鑰及密鑰,即將用戶輸入的明文密碼通過(guò)變換,用于加密操作。

S6:實(shí)現(xiàn)加密,即利用Spatialite空間數(shù)據(jù)庫(kù)提供的預(yù)留接口,并采用步驟S3確定的加密模型和步驟S4選擇的加密算法,用標(biāo)準(zhǔn)C語(yǔ)言編寫源代碼實(shí)現(xiàn)數(shù)據(jù)庫(kù)文件的加密;

S7:編譯及生成庫(kù)文件,即在NDK編譯環(huán)境下輸入命令進(jìn)行編譯,并生成Android系統(tǒng)運(yùn)行所需的庫(kù)文件;

S8:接口調(diào)用與應(yīng)用,即在Android開(kāi)發(fā)環(huán)境中,導(dǎo)入步驟S7得到的庫(kù)文件,調(diào)用接口實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。

本方案的有益效果為:

本發(fā)明為了解決Spatialite空間數(shù)據(jù)庫(kù)的數(shù)據(jù)安全問(wèn)題,在現(xiàn)有開(kāi)源Spatialite空間數(shù)據(jù)庫(kù)基礎(chǔ)上,擴(kuò)展其接口,在不影響現(xiàn)有接口和功能模塊前提下提供Spatialite空間數(shù)據(jù)庫(kù)加密方法,能夠直接進(jìn)行數(shù)據(jù)查詢、分析和統(tǒng)計(jì),經(jīng)編譯生成Android系統(tǒng)運(yùn)行所需的庫(kù)文件,實(shí)現(xiàn)Android設(shè)備的數(shù)據(jù)庫(kù)文件底層加密,解決了現(xiàn)有技術(shù)中的接口使用復(fù)雜、資源占用率高等問(wèn)題。

進(jìn)一步地,步驟S1中搭建NDK編譯環(huán)境,包括如下步驟:

S1-1:下載并安裝模擬環(huán)境工具,同時(shí)配置NDK環(huán)境變量,用于編譯命令調(diào)用;

S1-2:下載Android-NDK壓縮包,解壓、命名并配置系統(tǒng)環(huán)境變量;

S1-3:測(cè)試NDK編譯環(huán)境是否正常,若正常進(jìn)入步驟S2,否則進(jìn)入步驟S1-1。

進(jìn)一步地,步驟S2中資源及代碼下載,包括如下步驟:

S2-1:下載Spatialite源代碼,即下載Spatialite-Android,下載完成且解壓至D盤根目錄;

S2-2:下載編譯Spatialite空間數(shù)據(jù)庫(kù)所需資源。

進(jìn)一步地,步驟S2-2中所需數(shù)據(jù)庫(kù)包括geos庫(kù)、proj庫(kù)、Sqlite庫(kù)和libspatialite庫(kù)。

進(jìn)一步地,步驟S4中,選擇密碼學(xué)中的AES高級(jí)加密標(biāo)準(zhǔn)的候選算法,即Rijndael加密算法。

上述進(jìn)一步方案的有益效果為:

Rijndael加密算法加密速度快、效率高、計(jì)算量小、復(fù)雜度低和安全性好,其使用的密鑰和區(qū)塊長(zhǎng)度是32位的整數(shù)倍(以128位為下限,256位為上限),比標(biāo)準(zhǔn)的AES算法支持更大范圍的區(qū)塊和密鑰長(zhǎng)度,既滿足數(shù)據(jù)庫(kù)加密需求,也保障了數(shù)據(jù)安全而很難被攻擊者破壞。

進(jìn)一步地,步驟S7中編譯及生成庫(kù)文件,包括如下步驟:

S7-1:配置下載文件;

S7-2:配置編譯環(huán)境變量;

S7-3:運(yùn)行步驟S1安裝的環(huán)境模擬工具,輸入命令進(jìn)行編譯,生成Android系統(tǒng)運(yùn)行所需的庫(kù)文件。

進(jìn)一步地,步驟S8中對(duì)數(shù)據(jù)庫(kù)進(jìn)行的操作包括數(shù)據(jù)建庫(kù)、加密訪問(wèn)和存儲(chǔ)數(shù)據(jù)。

進(jìn)一步地,步驟S8中接口調(diào)用與應(yīng)用,包括如下步驟:

S8-1:對(duì)未加密數(shù)據(jù)庫(kù)進(jìn)行加密,打開(kāi)數(shù)據(jù)庫(kù),調(diào)用rekey函數(shù)設(shè)置數(shù)據(jù)庫(kù)口令,關(guān)閉數(shù)據(jù)庫(kù);

S8-2:對(duì)加密數(shù)據(jù)庫(kù)進(jìn)行讀取和操作,打開(kāi)數(shù)據(jù)庫(kù),調(diào)用key函數(shù)輸入數(shù)據(jù)庫(kù)口令,讀取加密數(shù)據(jù)庫(kù),輸入命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,關(guān)閉數(shù)據(jù)庫(kù)。

附圖說(shuō)明

圖1為一種基于Android系統(tǒng)的Spatialite空間數(shù)據(jù)庫(kù)加密方法流程圖;

圖2為搭建NDK編譯環(huán)境方法流程圖;

圖3為下載資源及代碼方法流程圖;

圖4為編譯及生成庫(kù)文件方法流程圖;

圖5為接口調(diào)用與應(yīng)用方法流程圖。

具體實(shí)施方式

下面對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行描述,以便于本技術(shù)領(lǐng)域的技術(shù)人員理解本發(fā)明,但應(yīng)該清楚,本發(fā)明不限于具體實(shí)施方式的范圍,對(duì)本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)講,只要各種變化在所附的權(quán)利要求限定和確定的本發(fā)明的精神和范圍內(nèi),這些變化是顯而易見(jiàn)的,一切利用本發(fā)明構(gòu)思的發(fā)明創(chuàng)造均在保護(hù)之列。

本發(fā)明實(shí)施例中,如圖1所示,一種基于Android系統(tǒng)的Spatialite空間數(shù)據(jù)庫(kù)加密方法,包括如下步驟:

S1:搭建NDK編譯環(huán)境,即搭建安裝Spatialite空間數(shù)據(jù)庫(kù)所需的NDK編譯環(huán)境,由于Spatialite是C/C++的native語(yǔ)言編寫,而Android默認(rèn)開(kāi)發(fā)語(yǔ)言是Java,在Windows上編譯Spatialite必須用到NDK(Native Development Kit)環(huán)境;

搭建NDK編譯環(huán)境,如圖2所示,包括如下步驟:

S1-1:下載安裝Cygwin,模擬Linux環(huán)境工具,同時(shí)配置NDK環(huán)境變量,方便ndk-build編譯命令調(diào)用,;

S1-2:下載NDK壓縮包,解壓并命名,存放路徑不能包含空格,文件名及文件夾名不能過(guò)長(zhǎng);

S1-3:測(cè)試NDK編譯環(huán)境是否正常,若正常進(jìn)入步驟S2,否則進(jìn)入步驟S1-1;

S2:下載資源及代碼,即下載安裝Spatialite空間數(shù)據(jù)庫(kù)編譯所需的資源及代碼,Spatialite是基于完全開(kāi)源的Sqlite作的空間擴(kuò)展,實(shí)現(xiàn)Spatialite空間數(shù)據(jù)加密,須下載下列資源;

下載資源及代碼,如圖3所示,包括如下步驟:

S2-1:下載Spatialite源代碼,即下載Spatialite-Android,下載完成且解壓后找到spatialite-android-library并將其移至D盤根目錄;

S2-2:下載geos庫(kù)、proj庫(kù)、Sqlite庫(kù)和libspatialite庫(kù);

S3:確定加密模型,即確定對(duì)Spatialite空間數(shù)據(jù)庫(kù)進(jìn)行加密的模型,Spatialite加密模型具備數(shù)據(jù)及信息加密功能,且時(shí)間、空間的開(kāi)銷小,在數(shù)據(jù)物理存取之前完成加/解密;

S4:選擇加密算法,即根據(jù)步驟S3確定的加密模型,選擇對(duì)Spatialite空間數(shù)據(jù)庫(kù)進(jìn)行加密的算法,選取了密碼學(xué)中加密速度快、效率高、計(jì)算量小、復(fù)雜度低和安全性好的高級(jí)加密標(biāo)準(zhǔn)的候選算法,即Rijndael加密算法,既滿足數(shù)據(jù)庫(kù)加密需求,也保障了數(shù)據(jù)安全而很難被攻擊者破壞;

S5:管理密鑰及密鑰,即將用戶輸入的明文密碼通過(guò)變換,用于加密操作;對(duì)用戶設(shè)定的長(zhǎng)度不固定且不能作為密鑰的口令進(jìn)行變換處理,即利用變換函數(shù)CodecGenerateReadKey(Codec*codec,char*userPassword,int passwordLength)對(duì)輸入的口令進(jìn)行變換,將其變換后的結(jié)果作為密鑰來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行加密;

S6:實(shí)現(xiàn)加密,利用Spatialite空間數(shù)據(jù)庫(kù)提供的預(yù)留接口sqlite3_key()、sqlite3_rekey()和sqlite3CodecAttach()加密API接口,采用步驟S3確定的加密模型和步驟S4選擇的加密算法,用標(biāo)準(zhǔn)C語(yǔ)言編寫源代碼實(shí)現(xiàn)數(shù)據(jù)庫(kù)文件的加密;函數(shù)sqlite3_key()用于指定數(shù)據(jù)庫(kù)所使用的口令或密鑰,加密后數(shù)據(jù)庫(kù)通過(guò)本函數(shù)實(shí)現(xiàn)數(shù)據(jù)的正常存取;函數(shù)sqlite3_rekey()用于為數(shù)據(jù)庫(kù)重新設(shè)定口令或密鑰,是實(shí)現(xiàn)數(shù)據(jù)庫(kù)加密、更新密碼或清除密碼的函數(shù);函數(shù)sqlite3CodecAttach()負(fù)責(zé)將密鑰(如果輸入的是口令則需利用步驟S5給出的方法和函數(shù)將口令轉(zhuǎn)換為密鑰)及頁(yè)面編碼函數(shù)與數(shù)據(jù)庫(kù)進(jìn)行關(guān)聯(lián),是數(shù)據(jù)庫(kù)實(shí)現(xiàn)加密、解密的核心函數(shù);

S7:編譯及生成庫(kù)文件,即輸入ndk-build-j8命令進(jìn)行編譯,并生成Android系統(tǒng)運(yùn)行所需的so庫(kù)文件;

編譯及生成庫(kù)文件,如圖4所示,包括如下步驟:

S7-1:配置下載文件,找到步驟2中下載的Spatialite源代碼解壓后spatialite-android-library目錄中的jni子目錄,將步驟2下載的libspatialite庫(kù)、geos庫(kù)、proj庫(kù)、Sqlite庫(kù)全部解壓至jni子目錄中;將步驟S5和步驟S6編寫的對(duì)應(yīng)源代碼復(fù)制到j(luò)ni子目錄下Sqlite庫(kù)解壓后的文件夾中;

S7-2:配置編譯環(huán)境變量,因?qū)qlite進(jìn)行了功能擴(kuò)展實(shí)現(xiàn)了Spaialite數(shù)據(jù)庫(kù)加密,Sqlite編譯時(shí)更改默認(rèn)的LOCAL_SRC_FILES參數(shù),以及在sqlite.c文件中首位置添加#define SQLITE_HAS_CODEC配置,用于標(biāo)識(shí)或開(kāi)啟Spaialite數(shù)據(jù)庫(kù)加密功能;

S7-3:運(yùn)行步驟S1安裝好的Linux環(huán)境模擬工具Cygwin,輸入ndk-build-j8命令進(jìn)行編譯,生成Android系統(tǒng)運(yùn)行所需的庫(kù)文件,即libjsqlite.so庫(kù)文件;

S8:接口調(diào)用與應(yīng)用,即在Android開(kāi)發(fā)環(huán)境中,導(dǎo)入步驟S7得到的庫(kù)文件,調(diào)用接口實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)建庫(kù)、加密訪問(wèn)和存儲(chǔ)數(shù)據(jù)的操作;

接口調(diào)用與應(yīng)用,如圖4所示,包括如下步驟:

S8-1:對(duì)未加密數(shù)據(jù)庫(kù)進(jìn)行加密,打開(kāi)數(shù)據(jù)庫(kù),調(diào)用rekey函數(shù)設(shè)置數(shù)據(jù)庫(kù)口令,關(guān)閉數(shù)據(jù)庫(kù);

(設(shè)置未加密數(shù)據(jù)庫(kù)口令):

//加密數(shù)據(jù)庫(kù):

S8-2:對(duì)加密數(shù)據(jù)庫(kù)進(jìn)行讀取和操作,打開(kāi)數(shù)據(jù)庫(kù),調(diào)用key函數(shù)輸入數(shù)據(jù)庫(kù)口令,讀取加密數(shù)據(jù)庫(kù),輸入命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,關(guān)閉數(shù)據(jù)庫(kù)。

(讀取加密數(shù)據(jù)庫(kù)并實(shí)現(xiàn)數(shù)據(jù)的存取):

//打開(kāi)數(shù)據(jù)庫(kù)和解密:

本發(fā)明在開(kāi)源的Spatialite框架下,整合了一種接口使用簡(jiǎn)單、資源占用率低的基于Android系統(tǒng)的Spatialite空間數(shù)據(jù)庫(kù)加密方法,能對(duì)加密后的Sqlite空間數(shù)據(jù)庫(kù)直接進(jìn)行數(shù)據(jù)查詢、分析和統(tǒng)計(jì)等常用操作,并且加密后的Sqlite空間數(shù)據(jù)庫(kù)使用簡(jiǎn)單和資源占用率低,廣泛應(yīng)用于自然資源調(diào)查、地理國(guó)情調(diào)查、國(guó)土資源執(zhí)法監(jiān)察和林業(yè)調(diào)查等行業(yè)。

總結(jié)

以上是生活随笔為你收集整理的spatialite android,一种基于Android系统的Spatialite空间数据库加密方法与流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。