本發(fā)明涉及程序設(shè)計
技術(shù)領(lǐng)域:
,特別是涉及基于應(yīng)用程序的數(shù)據(jù)加密及訪問方法、裝置。
背景技術(shù):
:windows、android等操作系統(tǒng)的可執(zhí)行程序中一般都存在常量存儲區(qū),該常量存儲區(qū)中的數(shù)據(jù)以常量值的形式直接存儲于程序代碼中,且在程序運行期間不可修改。常量存儲區(qū)具有只讀屬性,即使多線程訪問也沒有任何風險,保證了只讀數(shù)據(jù)的高效存儲和訪問。但是,正是由于常量存儲區(qū)的所有數(shù)據(jù)都是以常量值的形式存儲,所以在程序被破解之后這個區(qū)域的數(shù)據(jù)很容易被識別和篡改。而很多應(yīng)用程序的默認配置、固定數(shù)據(jù)都是作為常量數(shù)據(jù)存儲的,對其進行惡意修改或者植入廣告等行為都會給應(yīng)用程序帶來巨大的風險。因此,有必要對應(yīng)用程序的常量數(shù)據(jù)的存儲及訪問進行加密,以降低應(yīng)用程序被破解和篡改的風險。技術(shù)實現(xiàn)要素:為了解決上述技術(shù)問題,本申請公開了一種基于應(yīng)用程序的數(shù)據(jù)加密及訪問方法、裝置。第一方面,本申請?zhí)峁┝艘环N基于應(yīng)用程序的數(shù)據(jù)加密方法,所述方法包括:確定預(yù)設(shè)加密算法相關(guān)的各個加密參數(shù);其中,所述預(yù)設(shè)加密算法用于加密應(yīng)用程序的常量數(shù)據(jù);將所述預(yù)設(shè)加密算法和加密參數(shù)分別寫入加密數(shù)據(jù)的數(shù)據(jù)頭;其中,所述加密數(shù)據(jù)用于存儲加密后的常量數(shù)據(jù);將所述常量數(shù)據(jù)寫入所述加密數(shù)據(jù)的數(shù)據(jù)體,并根據(jù)所述預(yù)設(shè)加密算法所述數(shù)據(jù)體進行加密;將所述加密數(shù)據(jù)存入所述應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫,并將對所述加密數(shù)據(jù)的調(diào)用方法寫入所述應(yīng)用程序的源代碼。結(jié)合第一方面,在本申請第一方面第一種可行的實施方式中,所述將所述預(yù)設(shè)加密算法和加密參數(shù)分別寫入加密數(shù)據(jù)的數(shù)據(jù)頭,包括:將所述預(yù)設(shè)加密算法寫入所述數(shù)據(jù)頭中算法標識字段的預(yù)設(shè)字節(jié)處,所述算法標識字段中除所述預(yù)設(shè)字節(jié)外的其他字節(jié)隨機寫入英文字母;將各個加密參數(shù)依次按照“參數(shù)長度+參數(shù)內(nèi)容”的格式寫入所述數(shù)據(jù)頭的參數(shù)標識字段。結(jié)合第一方面,或者本申請第一方面第一種可行的實施方式,在本申請第一方面第二種可行的實施方式中,所述將所述常量數(shù)據(jù)寫入所述加密數(shù)據(jù)的數(shù)據(jù)體,包括:將各個常量數(shù)據(jù)依次按照“數(shù)據(jù)長度+數(shù)據(jù)內(nèi)容”的格式所述數(shù)據(jù)體。結(jié)合本申請第一方面第二種可行的實施方式,在本申請第一方面第三種可行的實施方式中,所述方法還包括:依次記錄各個常量數(shù)據(jù)在所述數(shù)據(jù)體中的起始位偏移量,得到常量數(shù)據(jù)唯一標識列表;將所述常量數(shù)據(jù)唯一標識列表寫入所述應(yīng)用程序的源代碼。第二方面,本申請?zhí)峁┝艘环N基于應(yīng)用程序的數(shù)據(jù)訪問方法,所述方法包括:確定應(yīng)用程序的源代碼中對加密數(shù)據(jù)的調(diào)用方法,并根據(jù)所述調(diào)用方法從所述應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫中獲取所述加密數(shù)據(jù);從所述加密數(shù)據(jù)的數(shù)據(jù)頭中讀取預(yù)設(shè)加密算法和加密參數(shù);根據(jù)所述預(yù)設(shè)加密算法和加密參數(shù)對所述加密參數(shù)的數(shù)據(jù)體進行解密;從解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù)。結(jié)合第二方面,在本申請第二方面第一種可行的實施方式中,所述從解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù),包括:獲取常量數(shù)據(jù)唯一標識列表;根據(jù)所述常量數(shù)據(jù)唯一標識列表確定所需的常量數(shù)據(jù)在所述解密后的數(shù)據(jù)體中的起始位偏移量;根據(jù)所述起始位偏移量在所述解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù)。第三方面,本申請?zhí)峁┝艘环N基于應(yīng)用程序的數(shù)據(jù)加密裝置,所述裝置包括:預(yù)處理單元,用于確定預(yù)設(shè)加密算法相關(guān)的各個加密參數(shù);其中,所述預(yù)設(shè)加密算法用于加密應(yīng)用程序的常量數(shù)據(jù);數(shù)據(jù)頭編輯單元,用于將所述預(yù)設(shè)加密算法和加密參數(shù)分別寫入加密數(shù)據(jù)的數(shù)據(jù)頭;其中,所述加密數(shù)據(jù)用于存儲加密后的常量數(shù)據(jù);數(shù)據(jù)體編輯單元,用于將所述常量數(shù)據(jù)寫入所述加密數(shù)據(jù)的數(shù)據(jù)體,并根據(jù)所述預(yù)設(shè)加密算法所述數(shù)據(jù)體進行加密;加密數(shù)據(jù)存儲單元,用于將所述加密數(shù)據(jù)存入所述應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫,并將對所述加密數(shù)據(jù)的調(diào)用方法寫入所述應(yīng)用程序的源代碼。結(jié)合第三方面,在本申請第三方面第一種可行的實施方式中,所述數(shù)據(jù)頭編輯單元包括:加密算法編輯單元,用于將所述預(yù)設(shè)加密算法寫入所述數(shù)據(jù)頭中算法標識字段的預(yù)設(shè)字節(jié)處,所述算法標識字段中除所述預(yù)設(shè)字節(jié)外的其他字節(jié)隨機寫入英文字母;加密參數(shù)編輯單元,用于將各個加密參數(shù)依次按照“參數(shù)長度+參數(shù)內(nèi)容”的格式寫入所述數(shù)據(jù)頭的參數(shù)標識字段。結(jié)合第三方面,或者第三方面第一種可行的實施方式,在本申請第三方面第二種可行的實施方式中,所述數(shù)據(jù)體編輯單元具體被配置為:將各個常量數(shù)據(jù)依次按照“數(shù)據(jù)長度+數(shù)據(jù)內(nèi)容”的格式寫入所述數(shù)據(jù)體。結(jié)合第三方面第二種可行的實施方式,在本申請第三方面第三種可行的實施方式中,所述裝置還包括:唯一標識記錄單元,用于依次記錄各個常量數(shù)據(jù)在所述數(shù)據(jù)體中的起始位偏移量,得到常量數(shù)據(jù)唯一標識列表;唯一標識存儲單元,用于將所述常量數(shù)據(jù)唯一標識列表寫入所述應(yīng)用程序的源代碼。第四方面,本申請?zhí)峁┝艘环N基于應(yīng)用程序的數(shù)據(jù)訪問裝置,所述裝置包括:加密數(shù)據(jù)獲取單元,用于確定應(yīng)用程序的源代碼中對加密數(shù)據(jù)的調(diào)用方法,并根據(jù)所述調(diào)用方法從所述應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫中獲取所述加密數(shù)據(jù);數(shù)據(jù)體解密單元,用于從所述加密數(shù)據(jù)的數(shù)據(jù)頭中讀取預(yù)設(shè)加密算法和加密參數(shù),并根據(jù)所述預(yù)設(shè)加密算法和加密參數(shù)對所述加密參數(shù)的數(shù)據(jù)體進行解密;數(shù)據(jù)體讀取單元,用于從解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù)。結(jié)合第四方面,本申請第四方面第一種可行的實施方式中,所述數(shù)據(jù)體讀取單元,包括:唯一標識獲取單元,用于獲取常量數(shù)據(jù)唯一標識列表;偏移量確定單元,用于根據(jù)所述常量數(shù)據(jù)唯一標識列表確定所需的常量數(shù)據(jù)在所述解密后的數(shù)據(jù)體中的起始位偏移量;數(shù)據(jù)讀取單元,用于根據(jù)所述起始位偏移量在所述解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù)。由以上技術(shù)方案可知,本申請實施例將應(yīng)用程序相關(guān)的各個常量數(shù)據(jù)均視為字符串,寫入數(shù)據(jù)體,再通過預(yù)設(shè)加密算法對該數(shù)據(jù)體進行加密,使得常量數(shù)據(jù)成為不能直接讀取的字節(jié)流;同時,將該預(yù)設(shè)加密算法和所采用的加密參數(shù)寫入數(shù)據(jù)頭,最終將上述數(shù)據(jù)頭和數(shù)據(jù)體構(gòu)成的加密數(shù)據(jù)不直接保留在應(yīng)用程序的源代碼中,而是存入該應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫,僅將相應(yīng)的調(diào)用方法寫入應(yīng)用程序的源代碼;在應(yīng)用程序運行時,可以先通過執(zhí)行源代碼中的調(diào)用方法獲取上述加密數(shù)據(jù),再通過解密等操作獲取到所需的常量數(shù)據(jù)?;谏鲜鰯?shù)據(jù)加密方法,常量數(shù)據(jù)的實際存儲位置是動態(tài)鏈接庫,即使對應(yīng)用程序進行反編譯也無法獲取常量數(shù)據(jù),更無法對常量數(shù)據(jù)進行修改;而對動態(tài)鏈接庫進行反編譯是很難操作的。因此,本實施例可以有效防止應(yīng)用程序相關(guān)的常量數(shù)據(jù)被篡改,提高應(yīng)用程序的安全性。附圖說明為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,對于本領(lǐng)域普通技術(shù)人員而言,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本申請一個實施例提供的基于應(yīng)用程序的數(shù)據(jù)加密方法的流程圖;圖2為本申請實施例提供的數(shù)據(jù)體的結(jié)構(gòu)示意圖;圖3為本申請一個實施例提供的基于應(yīng)用程序的數(shù)據(jù)訪問方法的流程圖;圖4為本申請另一個實施例提供的基于應(yīng)用程序的數(shù)據(jù)訪問方法的流程圖;圖5為本申請一個實施例提供的基于應(yīng)用程序的數(shù)據(jù)加密裝置的結(jié)構(gòu)框圖;圖6為本申請另一個實施例提供的基于應(yīng)用程序的數(shù)據(jù)加密裝置的結(jié)構(gòu)框圖;圖7為本申請一個實施例提供的基于應(yīng)用程序的數(shù)據(jù)訪問裝置的結(jié)構(gòu)框圖。具體實施方式這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。首先對本申請?zhí)峁┑幕趹?yīng)用程序的數(shù)據(jù)加密及訪問方法的實施例進行說明。圖1為本申請一個實施例提供的基于應(yīng)用程序的數(shù)據(jù)加密方法流程圖;參照圖1,該方法包 括如下步驟。s11、確定預(yù)設(shè)加密算法相關(guān)的各個加密參數(shù)。其中,所述預(yù)設(shè)加密算法用于加密應(yīng)用程序的常量數(shù)據(jù)。s12、將所述預(yù)設(shè)加密算法和加密參數(shù)分別寫入加密數(shù)據(jù)的數(shù)據(jù)頭。s13、將所述常量數(shù)據(jù)寫入所述加密數(shù)據(jù)的數(shù)據(jù)體,并根據(jù)所述預(yù)設(shè)加密算法所述數(shù)據(jù)體進行加密,得到加密數(shù)據(jù)體。s14、將所述數(shù)據(jù)頭和加密數(shù)據(jù)體構(gòu)成的加密數(shù)據(jù)存入所述應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫,并將對所述加密函數(shù)的調(diào)用方法寫入所述應(yīng)用程序的源代碼。其中,所述加密數(shù)據(jù)用于存儲加密后的常量數(shù)據(jù)。實際執(zhí)行時,可以預(yù)先為加密數(shù)據(jù)準備緩存地址,將已確定的數(shù)據(jù)頭各個字段以及數(shù)據(jù)體分別按預(yù)設(shè)格式寫入該緩存地址,在得到最終的加密數(shù)據(jù)后,再將加密數(shù)據(jù)從該緩存地址中取出并存入相應(yīng)的動態(tài)鏈接庫。上述動態(tài)鏈接庫(dynamic-linklibrary,dll)存儲有可以被與其關(guān)聯(lián)的任一進程所調(diào)用的函數(shù),實現(xiàn)這些函數(shù)在多個進程中的共享,使進程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。對于不同的操作系統(tǒng),其動態(tài)鏈接庫采用不同的文件格式存儲共享函數(shù),例如,windows系統(tǒng)的動態(tài)鏈接庫中為dll文件,android系統(tǒng)的動態(tài)鏈接庫中為so文件。具體的,上述加密函數(shù)以本機代碼(即nativecode)的形式存入動態(tài)鏈接庫;相應(yīng)的,在應(yīng)用程序的源代碼中寫入相應(yīng)的本機代碼調(diào)用方法(即nativemethod),即可使得應(yīng)用程序在運行過程中,通過執(zhí)行該本機代碼調(diào)用方法來從動態(tài)鏈接庫中調(diào)取相應(yīng)的加密數(shù)據(jù)。由以上步驟可知,本實施例將應(yīng)用程序相關(guān)的各個常量數(shù)據(jù)均視為字符串,寫入數(shù)據(jù)體,再通過預(yù)設(shè)加密算法對該數(shù)據(jù)體進行加密,使得常量數(shù)據(jù)稱為不能直接讀取的字節(jié)流;同時,將該預(yù)設(shè)加密算法和所采用的加密參數(shù)寫入數(shù)據(jù)頭,最終將上述數(shù)據(jù)頭和數(shù)據(jù)體構(gòu)成的加密數(shù)據(jù)不直接保留在應(yīng)用程序的源代碼中,而是存入該應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫,僅將相應(yīng)的調(diào)用方法寫入應(yīng)用程序的源代碼;在應(yīng)用程序運行時,可以先通過執(zhí)行源代碼中的調(diào)用方法獲取上述加密數(shù)據(jù),再通過解密等操作獲取到所需的常量數(shù)據(jù)。基于上述數(shù)據(jù)加密方法,常量數(shù)據(jù)的實際存儲位置是動態(tài)鏈接庫,即使對應(yīng)用程序進行反編譯也無法獲取常量數(shù)據(jù),更無法對常量數(shù)據(jù)進行修改;而對動態(tài)鏈接庫進行反編譯是很難操作的。因此,本實施例可以有效防止應(yīng)用程序相關(guān)的常量數(shù)據(jù)被篡改,提高應(yīng)用程序的安全性。本申請一個可行的實施例中,上述加密數(shù)據(jù)的數(shù)據(jù)頭中除了預(yù)設(shè)加密算法和加密參數(shù)之外,還包括:加密參數(shù)總個數(shù),加密數(shù)據(jù)體總長度,以及數(shù)據(jù)頭總長度三個字段;整個數(shù)據(jù)頭所包含的字段及其所占用的字節(jié)數(shù)如下:數(shù)據(jù)頭長度加密算法加密參數(shù)個數(shù)加密參數(shù)1加密參數(shù)2...加密參數(shù)n加密數(shù)據(jù)體長度4字節(jié)32字節(jié)4字節(jié)----4字節(jié)其中,數(shù)據(jù)頭長度字段占用4個字節(jié),標識包括本字段(4個字節(jié))在內(nèi)的整個數(shù)據(jù)頭的長度;加密算法共占用32個字節(jié);加密參數(shù)個數(shù)占用4個字節(jié);各個加密參數(shù)占用的字節(jié)數(shù)根據(jù)實際情況而定;加密數(shù)據(jù)體長度占用4個字節(jié),標識緊跟在數(shù)據(jù)頭之后的加密數(shù)據(jù)體的長度。上述步驟s12中所述的將預(yù)設(shè)加密算法寫入加密數(shù)據(jù)的數(shù)據(jù)頭,具體實施方式如下:將所述預(yù)設(shè)加密算法寫入所述數(shù)據(jù)頭中算法標識字段的預(yù)設(shè)字節(jié)處,所述算法標識字段中除所述預(yù)設(shè)字節(jié)外的其他字節(jié)隨機寫入英文字母。更具體的,在預(yù)設(shè)加密算法所占用的32個字節(jié)中,可以設(shè)定第0、3、13、14、25、31個字節(jié)為所述預(yù)設(shè)字節(jié),除此之外的其他字節(jié)可以隨機填入英文字母或任意字符。上述步驟s12中所述的將加密參數(shù)寫入加密數(shù)據(jù)的數(shù)據(jù)頭,具體實施方式如下:將各個加密參數(shù)依次按照“參數(shù)長度+參數(shù)內(nèi)容”的格式寫入所述數(shù)據(jù)頭的參數(shù)標識字段。即,數(shù)據(jù)頭中每個加密參數(shù)字段中的數(shù)據(jù)既包括加密參數(shù)本身,也包括該加密參數(shù)所占用的字節(jié)數(shù),格式如下:加密參數(shù)i長度加密參數(shù)i內(nèi)容4字節(jié)-其中,i=1,2,…,n;n為加密參數(shù)個數(shù)。在本申請另一個可行的實施例中,上述步驟s13所述的將所述常量數(shù)據(jù)寫入所述加密數(shù)據(jù)的數(shù)據(jù)體,具體實施方式如下:將各個常量數(shù)據(jù)依次按照“數(shù)據(jù)長度+數(shù)據(jù)內(nèi)容”的格式所述數(shù)據(jù)體。即,本申請實施例將各個常量數(shù)據(jù)均視為一個字符串,相應(yīng)的,加密數(shù)據(jù)的數(shù)據(jù)體相當于由多個短字符串拼接而成的長字符串,每個短字符串中不僅包括常量數(shù)據(jù)本身,還包括該常量數(shù)據(jù)所占用的字節(jié)數(shù),格式如下:常量數(shù)據(jù)j長度常量數(shù)據(jù)j內(nèi)容4字節(jié)-其中,j=1,2,…,m;m為常量數(shù)據(jù)的總個數(shù)?;谏鲜鰯?shù)據(jù)體中常量數(shù)據(jù)的存儲形式,本實施例提供的數(shù)據(jù)加密方法,在執(zhí)行步驟s13生成加密數(shù)據(jù)體的同時,還包括以下步驟:依次記錄各個常量數(shù)據(jù)在所述數(shù)據(jù)體中的起始位偏移量,得到常量數(shù)據(jù)唯一標識列表;將所述常量數(shù)據(jù)唯一標識列表寫入所述應(yīng)用程序的源代碼。由于加密數(shù)據(jù)的數(shù)據(jù)體相當于一個長字符串,每個常量數(shù)據(jù)分別對應(yīng)其中的一段;為便于在應(yīng)用程序運行時讀取其中的某個常量數(shù)據(jù),每寫入一個常量數(shù)據(jù)對應(yīng)的字符串,就在常量數(shù)據(jù)唯一標識列表中添加一個字符串標識,表征該常量數(shù)據(jù)對應(yīng)的字符串(包括標識該常量數(shù)據(jù)長度的4個字節(jié))在數(shù)據(jù)體中的起始位偏移量。如圖2所示數(shù)據(jù)體,其對應(yīng)的常量數(shù)據(jù)唯一標識列表如下:字符串標識1=0;字符串標識2=18;字符串標識3=40;字符串標識4=55;……;字符串標識m=2050??梢?,上述常量數(shù)據(jù)唯一標識列表實際為一組整數(shù)常量;為進一步保證常量數(shù)據(jù)的安全性,在將該常量數(shù)據(jù)唯一標識列表插入應(yīng)用程序的源代碼中時,可以按照預(yù)設(shè)修改規(guī)則將這一組整數(shù)常量中的各個標識名稱進行修改。根據(jù)上述常量數(shù)據(jù)唯一標識列表,可以準確、快速地從解密后的數(shù)據(jù)體對應(yīng)的長字符串中讀取某一個或幾個常量數(shù)據(jù)的對應(yīng)的短字符串。與上述基于應(yīng)用程序的數(shù)據(jù)加密方法相對應(yīng)的,本申請實施例還提供了一種基于應(yīng)用程序的數(shù)據(jù)訪問方法,用于在應(yīng)用程序運行時訪問通過上述數(shù)據(jù)加密方法加密的常量數(shù)據(jù)。如圖3所示,該數(shù)據(jù)方法方法包括如下步驟:s21、確定應(yīng)用程序的源代碼中對加密數(shù)據(jù)的調(diào)用方法,并根據(jù)所述調(diào)用方法從所述應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫中獲取所述加密數(shù)據(jù);s22、從所述加密數(shù)據(jù)的數(shù)據(jù)頭中讀取預(yù)設(shè)加密算法和加密參數(shù);s23、根據(jù)所述預(yù)設(shè)加密算法和加密參數(shù)對所述加密參數(shù)的數(shù)據(jù)體進行解密;s24、從解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù)。由以上技術(shù)方案可知,在應(yīng)用程序運行時,要獲取相關(guān)的常量數(shù)據(jù),必須通過執(zhí)行源代碼中的調(diào)用方法,來從動態(tài)鏈接庫中調(diào)取加密數(shù)據(jù),再根據(jù)該加密數(shù)據(jù)的數(shù)據(jù)頭中存儲的預(yù)設(shè)加密算法對該加密數(shù)據(jù)的數(shù)據(jù)體進行解密,才能從解密后的數(shù)據(jù)體中讀取到 各個常量數(shù)據(jù)??梢姡诒旧暾垖嵤├?,常量數(shù)據(jù)的實際存儲位置是動態(tài)鏈接庫,即使對應(yīng)用程序進行反編譯也無法獲取常量數(shù)據(jù),更無法對常量數(shù)據(jù)進行修改;而對動態(tài)鏈接庫進行反編譯是很難操作的。因此,本實施例可以有效防止應(yīng)用程序相關(guān)的常量數(shù)據(jù)被篡改,提高應(yīng)用程序的安全性。參照圖4,基于上文數(shù)據(jù)加密方法實施例所述的常量數(shù)據(jù)唯一標識列表,上述步驟s24所述的從解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù),具體包括如下步驟:s241、獲取常量數(shù)據(jù)唯一標識列表;s242、根據(jù)所述常量數(shù)據(jù)唯一標識列表確定所需的常量數(shù)據(jù)在所述解密后的數(shù)據(jù)體中的起始位偏移量;s243、根據(jù)所述起始位偏移量在所述解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù)。仍以圖2所示數(shù)據(jù)體為例,在應(yīng)用程序運行時得到其解密后的數(shù)據(jù)體后,根據(jù)應(yīng)用程序源代碼中的常量數(shù)據(jù)體唯一標識列表,確定要讀取的常量數(shù)據(jù)對應(yīng)的起始位偏移量為55,則從解密后的數(shù)據(jù)體第55個字節(jié)開始讀取,根據(jù)上文所述的“數(shù)據(jù)長度+數(shù)據(jù)內(nèi)容”的存儲格式,先讀取4個字節(jié),確定該常量數(shù)據(jù)的實際字節(jié)數(shù)x,再繼續(xù)讀取x個字節(jié),即可得到相應(yīng)的常量數(shù)據(jù)??梢?,上述實施例通過常量數(shù)據(jù)唯一標識列表實現(xiàn)從解密后的數(shù)據(jù)體對應(yīng)的長字符串中讀取某一個或幾個常量數(shù)據(jù)對應(yīng)的短字符串,可以提高數(shù)據(jù)讀取速度及準確率。另外,本申請實施例還提供了一種計算機存儲介質(zhì),例如可以是rom、隨機存取存儲器(ram)、cd-rom、磁帶、軟盤和光數(shù)據(jù)存儲設(shè)備等;該計算機存儲介質(zhì)中存儲有程序,當所述存儲介質(zhì)中的程序由相應(yīng)設(shè)備的處理器執(zhí)行時,使得該設(shè)備能夠執(zhí)行上述方法實施例中記載的任一種數(shù)據(jù)加密方法、數(shù)據(jù)訪問方法中的部分或全部步驟。與上述基于應(yīng)用程序的數(shù)據(jù)加密方法的實施例相對應(yīng),本申請實施例還提供了一種基于應(yīng)用程序的數(shù)據(jù)加密裝置,圖5為該裝置的一種結(jié)構(gòu)示意圖。參照圖5,該裝置包括:預(yù)處理單元101、數(shù)據(jù)頭編輯單元102、數(shù)據(jù)體編輯單元103和加密數(shù)據(jù)存儲單元104。其中,該預(yù)處理單元101用于,確定預(yù)設(shè)加密算法相關(guān)的各個加密參數(shù);其中,所述預(yù)設(shè)加密算法用于加密應(yīng)用程序的常量數(shù)據(jù)。該數(shù)據(jù)頭編輯單元102用于,將所述預(yù)設(shè)加密算法和加密參數(shù)分別寫入加密數(shù)據(jù)的數(shù)據(jù)頭;其中,所述加密數(shù)據(jù)用于存儲加密后的常量數(shù)據(jù)。該數(shù)據(jù)體編輯單元103用于,將所述常量數(shù)據(jù)寫入所述加密數(shù)據(jù)的數(shù)據(jù)體,并根據(jù)所述預(yù)設(shè)加密算法所述數(shù)據(jù)體進行加密。該加密數(shù)據(jù)存儲單元104用于,將所述加密數(shù)據(jù)存入所述應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫,并將對所述加密數(shù)據(jù)的調(diào)用方法寫入所述應(yīng)用程序的源代碼。由以上技術(shù)方案可知,本申請實施例將應(yīng)用程序相關(guān)的各個常量數(shù)據(jù)均視為字符串,寫入數(shù)據(jù)體,再通過預(yù)設(shè)加密算法對該數(shù)據(jù)體進行加密,使得常量數(shù)據(jù)稱為不能直接讀取的字節(jié)流;同時,將該預(yù)設(shè)加密算法和所采用的加密參數(shù)寫入數(shù)據(jù)頭,最終將上述數(shù)據(jù)頭和數(shù)據(jù)體構(gòu)成的加密數(shù)據(jù)不直接保留在應(yīng)用程序的源代碼中,而是存入該應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫,僅將相應(yīng)的調(diào)用方法寫入應(yīng)用程序的源代碼;在應(yīng)用程序運行時,可以先通過執(zhí)行源代碼中的調(diào)用方法獲取上述加密數(shù)據(jù),再通過解密等操作獲取到所需的常量數(shù)據(jù)?;谏鲜鰯?shù)據(jù)加密方法,常量數(shù)據(jù)的實際存儲位置是動態(tài)鏈接庫,即使對應(yīng)用程序進行反編譯也無法獲取常量數(shù)據(jù),更無法對常量數(shù)據(jù)進行修改;而對動態(tài)鏈接庫進行反編譯是很難操作的。因此,本實施例可以有效防止應(yīng)用程序相關(guān)的常量數(shù)據(jù)被篡改,提高應(yīng)用程序的安全性。在本申請一個可行的實施方式中,上述數(shù)據(jù)頭編輯單元102,具體可以包括:加密算法編輯單元和加密參數(shù)編輯單元。其中,該加密算法編輯單元,用于將所述預(yù)設(shè)加密算法寫入所述數(shù)據(jù)頭中算法標識字段的預(yù)設(shè)字節(jié)處,所述算法標識字段中除所述預(yù)設(shè)字節(jié)外的其他字節(jié)隨機寫入英文字母;該加密參數(shù)編輯單元,用于將各個加密參數(shù)依次按照“參數(shù)長度+參數(shù)內(nèi)容”的格式寫入所述數(shù)據(jù)頭的參數(shù)標識字段。在本申請一個可行的實施方式中,上述數(shù)據(jù)體編輯單元103具體被配置為:將各個常量數(shù)據(jù)依次按照“數(shù)據(jù)長度+數(shù)據(jù)內(nèi)容”的格式寫入所述數(shù)據(jù)體。參照圖6,上述數(shù)據(jù)體中常量數(shù)據(jù)的存儲形式,本實施例提供的數(shù)據(jù)加密裝置還包括:唯一標識記錄單元105和唯一標識存儲單元106。其中,唯一標識記錄單元105用于,依次記錄各個常量數(shù)據(jù)在所述數(shù)據(jù)體中的起始位偏移量,得到常量數(shù)據(jù)唯一標識列表;唯一標識存儲單元106用于,將所述常量數(shù)據(jù)唯一標識列表寫入所述應(yīng)用程序的源代碼??梢姡鲜鰧嵤├鶕?jù)上述常量數(shù)據(jù)唯一標識列表,可以準確、快速地從解密后的數(shù)據(jù)體對應(yīng)的長字符串中讀取某一個或幾個常量數(shù)據(jù)的對應(yīng)的短字符串。與上述基于應(yīng)用程序的數(shù)據(jù)訪問方法相對應(yīng)的,本申請實施例還提供了一種基于應(yīng)用程序的數(shù)據(jù)訪問裝置,用于在應(yīng)用程序運行時訪問通過上述數(shù)據(jù)加密方法加密的常量數(shù)據(jù)。如圖7所示,該裝置包括:加密數(shù)據(jù)獲取單元201、數(shù)據(jù)體解密單元202和數(shù)據(jù)體讀取單元203。其中,該加密數(shù)據(jù)獲取單元201用于,確定所述應(yīng)用程序的源代碼中對加密數(shù)據(jù)的調(diào)用方法,并根據(jù)所述調(diào)用方法從所述應(yīng)用程序?qū)?yīng)的動態(tài)鏈接庫中獲取所述加密數(shù)據(jù);該數(shù)據(jù)體解密單元202用于,從所述加密數(shù)據(jù)的數(shù)據(jù)頭中讀取預(yù)設(shè)加密算法和加密參數(shù),并根據(jù)所述預(yù)設(shè)加密算法和加密參數(shù)對所述加密參數(shù)的數(shù)據(jù)體進行解密;該數(shù)據(jù)體讀取單元203用于,從解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù)。由以上技術(shù)方案可知,在應(yīng)用程序運行時,要獲取相關(guān)的常量數(shù)據(jù),必須通過執(zhí)行源代碼中的調(diào)用方法,來從動態(tài)鏈接庫中調(diào)取加密數(shù)據(jù),再根據(jù)該加密數(shù)據(jù)的數(shù)據(jù)頭中存儲的預(yù)設(shè)加密算法對該加密數(shù)據(jù)的數(shù)據(jù)體進行解密,才能從解密后的數(shù)據(jù)體中讀取到各個常量數(shù)據(jù)。可見,基于本申請實施例,常量數(shù)據(jù)的實際存儲位置是動態(tài)鏈接庫,即使對應(yīng)用程序進行反編譯也無法獲取常量數(shù)據(jù),更無法對常量數(shù)據(jù)進行修改;而對動態(tài)鏈接庫進行反編譯是很難操作的。因此,本實施例可以有效防止應(yīng)用程序相關(guān)的常量數(shù)據(jù)被篡改,提高應(yīng)用程序的安全性。在本申請一個可行的實施方式中,對應(yīng)于圖6所示的數(shù)據(jù)加密裝置,上述數(shù)據(jù)體讀取單元203,具體可以包括:唯一標識獲取單元,用于獲取常量數(shù)據(jù)唯一標識列表;偏移量確定單元,用于根據(jù)所述常量數(shù)據(jù)唯一標識列表確定所需的常量數(shù)據(jù)在所述解密后的數(shù)據(jù)體中的起始位偏移量;數(shù)據(jù)讀取單元,用于根據(jù)所述起始位偏移量在所述解密后的數(shù)據(jù)體中讀取所需的常量數(shù)據(jù)??梢?,上述實施例根據(jù)常量數(shù)據(jù)唯一標識列表實現(xiàn)從解密后的數(shù)據(jù)體對應(yīng)的長字符 串中讀取某一個或幾個常量數(shù)據(jù)對應(yīng)的短字符串,可以提高數(shù)據(jù)讀取速度及準確率。本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置和系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上所述的本發(fā)明實施方式,并不構(gòu)成對本發(fā)明保護范圍的限定。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。當前第1頁12