一種基于數(shù)字水印和java本地調(diào)用的數(shù)據(jù)加解密方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加解密方法及系統(tǒng),其中數(shù)據(jù)加密方法,具體包括以下步驟:步驟1:JAVA層對(duì)源數(shù)據(jù)進(jìn)行加密構(gòu)成加密數(shù)據(jù),并通過加密接口將所述加密數(shù)據(jù)發(fā)送到C層中;步驟2:C層采用數(shù)字水印的技術(shù)對(duì)加密數(shù)據(jù)添加APK簽名公鑰S1構(gòu)成水印加密數(shù)據(jù);步驟3:C層保存水印加密數(shù)據(jù),完成數(shù)據(jù)的加密存儲(chǔ)。本發(fā)明通過在C層解密函數(shù)加入身份校驗(yàn),有效的阻止了黑客通過仿造身份去訪問C層獲得數(shù)據(jù)的行為。從而使JAVA本地調(diào)用技術(shù)在安全領(lǐng)域的使用前景更加廣泛,為廣大的Android開發(fā)者提供了一種良好的數(shù)據(jù)安全解決方案。
【專利說明】-種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加解密方法及 系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)的加解密方法及系統(tǒng),尤其涉及一種基于數(shù)字水印和JAVA本地 調(diào)用的數(shù)據(jù)加解密方法及系統(tǒng)。
【背景技術(shù)】
[0002] 目前在Android中數(shù)據(jù)存儲(chǔ)的方式基本有4種,分別是:
[0003] 1. SharedPreferences :是一種輕型的數(shù)據(jù)存儲(chǔ)方式,它的本質(zhì)是基于XML文件 存儲(chǔ)key-value鍵值對(duì)數(shù)據(jù),通常用來存儲(chǔ)一些簡單的配置信息。其存儲(chǔ)位置在/data/ data/〈包名 >/shared_prefs 目錄下。
[0004] 2. SQLite是一種轉(zhuǎn)為嵌入式設(shè)備設(shè)計(jì)的輕型數(shù)據(jù)庫,所有的數(shù)據(jù)庫都是儲(chǔ)存于 "data/data/應(yīng)用報(bào)名 /databases" 目錄下。
[0005] 3. File :即常說的文件(I/O)存儲(chǔ)方法,常用語存儲(chǔ)大數(shù)量的數(shù)據(jù),其存儲(chǔ)路徑可 以是SD卡,也可以是手機(jī)內(nèi)存。
[0006] 4. ContentProvider:Android系統(tǒng)中能實(shí)現(xiàn)所有應(yīng)用程序共享的一種數(shù)據(jù)存儲(chǔ)方 式,每個(gè)Content Provider都會(huì)對(duì)外提供一個(gè)公共的URI (包裝成Uri對(duì)象),如果應(yīng)用程 序有數(shù)據(jù)需要共享時(shí),就需要使用Content Provider為這些數(shù)據(jù)定義一個(gè)URI,然后其他 的應(yīng)用程序就通過Content Provider傳入這個(gè)URI來對(duì)數(shù)據(jù)進(jìn)行操作。其中需要持久化 的數(shù)據(jù)可以保存在SD卡,也可以保存在手機(jī)內(nèi)存。
[0007] 這4種存儲(chǔ)方式的共同特點(diǎn)是:如果黑客通過獲得Android手機(jī)的root權(quán)限,以 上保存數(shù)據(jù)的文件都可以輕松的被拿到。因此需要對(duì)源數(shù)據(jù)加密,數(shù)據(jù)加密技術(shù)同樣困難 重重,因?yàn)锳ndroid APP采用JAVA語言作為支撐;眾所周知JAVA語言反編譯十分猖獗,如 果一些核心的代碼放在Java層將面臨反編譯后的代碼泄露的風(fēng)險(xiǎn)。利用JAVA本地調(diào)用技 術(shù)把核心算法轉(zhuǎn)向C層后仍需要對(duì)JAVA層和C層之間的交互過程進(jìn)行保護(hù),因?yàn)镴AVA層 不受保護(hù),黑客可以通過仿造身份去訪問C層,獲得數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明所要解決的技術(shù)問題是,針對(duì)現(xiàn)有技術(shù)的不足,提供一種避免黑客通過仿 造身份去訪問C層獲得數(shù)據(jù)的基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加解密方法及系統(tǒng)。
[0009] 本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種基于數(shù)字水印和JAVA本地調(diào)用 的數(shù)據(jù)加密方法,具體包括以下步驟:
[0010] 步驟1 : JAVA層對(duì)源數(shù)據(jù)進(jìn)行加密構(gòu)成加密數(shù)據(jù),并通過加密接口將所述加密數(shù) 據(jù)發(fā)送到C層中;
[0011] 步驟2 :C層采用數(shù)字水印的技術(shù)對(duì)加密數(shù)據(jù)添加APK簽名公鑰S1構(gòu)成水印加密 數(shù)據(jù);
[0012] 步驟3 :C層保存水印加密數(shù)據(jù),完成數(shù)據(jù)的加密存儲(chǔ)。
[0013] 本發(fā)明的有益效果是:本發(fā)明通過在C層解密函數(shù)加入身份校驗(yàn),有效的阻止了 黑客通過仿造身份去訪問C層獲得數(shù)據(jù)的行為。從而使JAVA本地調(diào)用技術(shù)在安全領(lǐng)域的 使用前景更加廣泛,為廣大的Android開發(fā)者提供了一種良好的數(shù)據(jù)安全解決方案。
[0014] 在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0015] 進(jìn)一步,所述步驟1中對(duì)源數(shù)據(jù)的加密采用的加密方法為AES256算法。
[0016] 進(jìn)一步,所述步驟1中JAVA層采用JAVA本地調(diào)用調(diào)用技術(shù)調(diào)用AES256算法進(jìn)行 加密源數(shù)據(jù)。
[0017] 本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種基于數(shù)字水印和JAVA本地調(diào)用 的數(shù)據(jù)解密方法,具體包括以下步驟:
[0018] 步驟1 :JAVA層接收外部用戶輸入的調(diào)用指令,解析調(diào)用指令得到APK簽名公鑰 S2,并將APK簽名公鑰S2發(fā)送到C層;
[0019] 步驟2 :判斷APK簽名公鑰S2與APK簽名公鑰S1是否相同,如果相同,執(zhí)行步驟 3 ;否則,結(jié)束;
[0020] 步驟3 :C層將加密數(shù)據(jù)進(jìn)行解密為源數(shù)據(jù),并將源數(shù)據(jù)通過解密通道傳輸?shù)絁AVA 層;
[0021] 步驟4 : JAVA層將源數(shù)據(jù)發(fā)送給外部用戶。
[0022] 在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0023] 進(jìn)一步,所述步驟3中對(duì)加密數(shù)據(jù)的解密采用的解密方法為AES256算法。
[0024] 本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種基于數(shù)字水印和JAVA本地調(diào)用 的數(shù)據(jù)加解密系統(tǒng),包括JAVA層和C層;
[0025] 所述JAVA層對(duì)源數(shù)據(jù)進(jìn)行加密構(gòu)成加密數(shù)據(jù),并通過加密接口將所述加密數(shù)據(jù) 發(fā)送到C層中;并且所述JAVA層接收外部用戶輸入的調(diào)用指令,解析調(diào)用指令得到APK簽 名公鑰S2,并將APK簽名公鑰S2發(fā)送到C層;進(jìn)一步接收C層反饋的源數(shù)據(jù)發(fā)送給外部用 戶;
[0026] 所述C層采用數(shù)字水印的技術(shù)對(duì)加密數(shù)據(jù)添加APK簽名公鑰S1構(gòu)成水印加密數(shù) 據(jù),并保存水印加密數(shù)據(jù);C層將從JAVA層接收的APK簽名公鑰S2與APK簽名公鑰S1進(jìn) 行對(duì)比,當(dāng)APK簽名公鑰S2和APK簽名公鑰S1相同時(shí),C層將加密數(shù)據(jù)解密為源數(shù)據(jù)通過 解密通道發(fā)送到JAVA層;否則,結(jié)束;C層在解密數(shù)據(jù)的時(shí)候動(dòng)態(tài)獲取APK簽名公鑰S1,和 之前C層打入的水印數(shù)據(jù)APK簽名公鑰S1進(jìn)行比對(duì),如果一致提供解密數(shù)據(jù),如果不一致 程序退出。
[0027] 在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0028] 進(jìn)一步,所述JAVA層對(duì)源數(shù)據(jù)的加密采用的加密方法為AES256算法;所述JAVA 層對(duì)加密數(shù)據(jù)的解密采用的解密方法為AES256算法。
[0029] 進(jìn)一步,所述JAVA層采用JAVA本地調(diào)用調(diào)用技術(shù)調(diào)用AES256算法進(jìn)行加密源數(shù) 據(jù)。
[0030] 本發(fā)明利用JAVA本地調(diào)用技術(shù)把核心代碼從JAVA層轉(zhuǎn)向C層。核心代碼轉(zhuǎn)向C 層后,增加了反編譯的難度對(duì)核心代碼起到了保護(hù)作用;本發(fā)明采用在C層使用數(shù)字水印 技術(shù),通過隱藏在so庫中的信息確認(rèn)使用者是否被篡改。
[0031] 本發(fā)明的核心思路:核心代碼存放位置在C層,核心代碼從C層流向Java層通過 數(shù)字水印技術(shù)識(shí)別使用者身份合法性。
[0032] C層代碼是按照J(rèn)AVA本地調(diào)用規(guī)范利用谷歌提供的NDK工具開發(fā)的庫文件,因?yàn)?動(dòng)態(tài)連接庫體積小我們選擇把C代碼編譯成動(dòng)態(tài)連接庫,在Android中是以.so為后綴的 庫文件形式存在APK文件中。C層代碼里包含了對(duì)源數(shù)據(jù)進(jìn)行加密的算法,還包含了對(duì)調(diào)用 者的身份校驗(yàn)。
[0033] JAVA本地調(diào)用是Java Native Interface的縮寫,中文為JAVA本地調(diào)用,它允許 Java代碼和其他語言寫的代碼進(jìn)行交互。開發(fā)者只要按照規(guī)范開發(fā),就能實(shí)現(xiàn)JAVA層代碼 和C層代碼的互相調(diào)用。
[0034] JAVA層也可以稱為Application層,因?yàn)锳pplication的運(yùn)行環(huán)境是用JAVA語 言支撐的,Application所需的任何資源都是通過JAVA虛擬機(jī)和硬件系統(tǒng)交互。Java層通 過加密接口把獲得的源數(shù)據(jù)傳入C層加密函數(shù)采用AES256算法加密保存在文件系統(tǒng),Java 層通過解密接口把保存在文件系統(tǒng)上的文件內(nèi)容通AES256算法解密并通過解密函數(shù)輸出 到Java層。
【專利附圖】
【附圖說明】
[0035] 圖1為本發(fā)明所述的一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加密方法流程 圖;
[0036] 圖2為本發(fā)明所述的一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)接密方法流程 圖;
[0037] 圖3為本發(fā)明所述的一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加解密系統(tǒng)框圖。
[0038] 附圖中,各標(biāo)號(hào)所代表的部件列表如下:
[0039] 1、JAVA 層,2、C 層。
【具體實(shí)施方式】
[0040] 以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并 非用于限定本發(fā)明的范圍。
[0041] 如圖1所示,一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加密方法,具體包括以下 步驟:
[0042] 步驟1 : JAVA層對(duì)源數(shù)據(jù)進(jìn)行加密構(gòu)成加密數(shù)據(jù),并通過加密接口將所述加密數(shù) 據(jù)發(fā)送到C層中;
[0043] 步驟2 :C層采用數(shù)字水印的技術(shù)對(duì)加密數(shù)據(jù)添加 APK簽名公鑰S1構(gòu)成水印加密 數(shù)據(jù);
[0044] 步驟3 :C層保存水印加密數(shù)據(jù),完成數(shù)據(jù)的加密存儲(chǔ)。
[0045] 所述步驟1中對(duì)源數(shù)據(jù)的加密采用的加密方法為AES256算法。
[0046] 所述步驟1中JAVA層采用JAVA本地調(diào)用調(diào)用技術(shù)調(diào)用AES256算法進(jìn)行加密源 數(shù)據(jù)。
[0047] 如圖2所示,一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)解密方法,具體包括以下 步驟:
[0048] 步驟1 JAVA層接收外部用戶輸入的調(diào)用指令,解析調(diào)用指令得到APK簽名公鑰 S2,并將APK簽名公鑰S2發(fā)送到C層;
[0049] 步驟2 :判斷APK簽名公鑰S2與APK簽名公鑰S1是否相同,如果相同,執(zhí)行步驟 3 ;否則,結(jié)束;
[0050] 步驟3 :C層將加密數(shù)據(jù)進(jìn)行解密為源數(shù)據(jù),并將源數(shù)據(jù)通過解密通道傳輸?shù)絁AVA 層;
[0051] 步驟4 : JAVA層將源數(shù)據(jù)發(fā)送給外部用戶。
[0052] 所述步驟3中對(duì)加密數(shù)據(jù)的解密采用的解密方法為AES256算法。
[0053] 如圖3所示,一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加解密系統(tǒng),包括JAVA層 1和C層2 ;
[0054] 所述JAVA層1對(duì)源數(shù)據(jù)進(jìn)行加密構(gòu)成加密數(shù)據(jù),并通過加密接口將所述加密數(shù)據(jù) 發(fā)送到C層2中;并且所述JAVA層1接收外部用戶輸入的調(diào)用指令,解析調(diào)用指令得到APK 簽名公鑰S2,并將APK簽名公鑰S2發(fā)送到C層;進(jìn)一步接收C層2反饋的源數(shù)據(jù)發(fā)送給外 部用戶;
[0055] 所述C層2采用數(shù)字水印的技術(shù)對(duì)加密數(shù)據(jù)添加 APK簽名公鑰S1構(gòu)成水印加密 數(shù)據(jù),并保存水印加密數(shù)據(jù);C層2將從JAVA層1接收的APK簽名公鑰S2與APK簽名公鑰 S1進(jìn)行對(duì)比,當(dāng)APK簽名公鑰S2和APK簽名公鑰S1相同時(shí),C層2將加密數(shù)據(jù)解密為源數(shù) 據(jù)通過解密通道發(fā)送到JAVA層1 ;否則,結(jié)束。
[0056] 所述JAVA層1對(duì)源數(shù)據(jù)的加密采用的加密方法為AES256算法;所述JAVA層對(duì)加 密數(shù)據(jù)的解密采用的解密方法為AES256算法。
[0057] 所述JAVA層1采用JAVA本地調(diào)用調(diào)用技術(shù)調(diào)用AES256算法進(jìn)行加密源數(shù)據(jù)。
[0058] 開發(fā)C層代碼,C層代碼用來實(shí)現(xiàn)數(shù)據(jù)的加解密,加密算法采用AES256算法,在開 發(fā)加解密函數(shù)時(shí)加入數(shù)字水印一傳入正確的APK簽名公鑰S1 (開發(fā)者身份),在解密函數(shù) 被調(diào)用時(shí)動(dòng)態(tài)獲取當(dāng)前的APK簽名公鑰S2,和開發(fā)時(shí)傳入的公鑰進(jìn)行比對(duì),從而確定使用 者身份的合法性。
[0059] Java層通過加密接口把獲得的源數(shù)據(jù)傳入C層加密函數(shù)采用AES256算法加密保 存在文件系統(tǒng),Java層通過解密接口把保存在文件系統(tǒng)上的文件內(nèi)容通AES256算法解密 并通過解密函數(shù)輸出到Java層,C層解密函數(shù)被調(diào)用時(shí)會(huì)動(dòng)態(tài)獲取當(dāng)前APK簽名公鑰S2, 我們?cè)陂_發(fā)C層時(shí)曾傳入數(shù)字簽名一APK簽名公鑰Sl,S1和S2比較實(shí)現(xiàn)身份校驗(yàn)。
[0060] S1和S2相同則校驗(yàn)通過,C層把文件系統(tǒng)上的文件內(nèi)容通過AES256解密后輸出, S1和S2不同則校驗(yàn)失敗,C層可終止程序向下運(yùn)行。
[0061] C層代碼實(shí)現(xiàn)加密解密函數(shù)
[0062] 利用RSA算法在C環(huán)境下開發(fā)兩個(gè)函數(shù),一個(gè)加密函數(shù),一個(gè)解密函數(shù)。
[0063] JAVA 本地調(diào)用 EXPORT jstring JAVA 本地調(diào)用 CALL Java-coni-i iheima-ndk-Ndk-lhel loAct ivi ty-saveToken ( JAVA 本地調(diào)用 Env =-env jobject obj, jstring jSrcStr) { char* srcStr = Jstring2CStr (env, jSrcStr); LOG ! ("srcStr--> %s",srcSir); if (srcSir==NULL) srcSir = li-ELEMTYPE p, q, e, d, n, t; i.ELEMTYPE i = 0; i-ELEMTYPE acSecrei-Text [sirlen (srcSir)]; C-ELEMTYPE acPublic-Text[strlen (srcStr)]; memsel (acSecrel-Text, 0, s i zeof (acSecret-Text)); memsei (acPubl ic-Text, 0, s i zeof (acPubl ic-Text)); memcpy (acPublic-Texl, srcStr, strlen (srcStr)); p = 53; q = 79;
[0064] e = 77777; η = p * q; t = (p - 1) * (q - 1); d = 1; while (((e * d) % t) != 1) { d++; } char str [str len (srcStr)]; sprintf (str,"; for (i = 0; i < sirlen (srcStr); ?++) { int. L = strlen (str); acSecret-Text [i] = Rsa-un-enCode (acPublic - Text [i], e, n); LOGI ("acPublic-Texl[°/0d]-> °/〇cn, i, acPublic-Text [i]); sprintf (str + I, "%d ", Rsa-un_enCode (acPublic.Texi [i], e, n)), } char* srcFileStr = "/data/data/com. itheima. ndk/files/aaa. txt"; char* accessModeStr = "wb+"; FTLE *fp; fp = f n (s rcF11 eStr, accessModeSi r);
[0065] fwri te (str, strlen (str), 1, fp); fclose (Γρ); reiurn (*env) ->Ne\vSl r i ngUTF (env, sir); } JAVA 本地調(diào)用 EXPORT jstring JAVA 本地調(diào)用 CALL Java-com-itheima-ndk-Ndk-lhelloAct ivily-getToken (JAVA 本地調(diào)用 Env *env, jobject obj, jobject context) { char* c 1 assnarne = "com/cmsc/emmus 1c/init/GetAppInfo"; //第一步找到該類 jelass clazz = (*env)->FindClass(env, classname); LOGI ("clazz"); //第2步在該類中找到該方法 jmeihodn) method = (*env)->CetSiai icMelliodTD (env, clazz, "getSign", " (Landroid/content/Context;)Ljava/lang/String;"); LOCI ("method"); //執(zhí)行該方法 jstring jsign = (js Ir i ng) (*env)->Ca1 IStat i cObjectMelhod (env, clazz, melhod, contexl); LOG! ("jsign"); char* sign = Jslr ing2CSlr (env, jsign); if (strcmp(sign, SING_CODE_TEXT) ==0) { } else {
[0066] return (*env)->NewSli ingUTF (env, " the signature is different!"); } 1 i-ELEMTYPE p, q, e, d, n, t; i_ELEMTYPE i = 0; i_ELEMTYPE acSecret - Text [TEXT-MAX-NUM]; c_ELEMTYPE acFile -Text [TEXT_MM-NUM]; c-ELEMTYPE acPublic-Text[TEXT_MAX-NUM]; memset (acSecret-Text, 0, s izeof (acSecrel-Texi)); meraset (acFi le_Text, 0, s izeof (acFi le-Text)); memset(acPublic.Text, 0, sizeof (acPublic-Text)); p = 53, a = 79; e = 77777; n = p * q; t = (p - 1) * (q - 1); d = 1; while (((e * d) °/〇 t) != 1) { d++; }
[0067] char* srcFilcStr = "/data/data/com. itheima. ndk/files/aaa. txt"; char* accessModeStr = "rb", FILE *fp; fp = fopen (srcFileStr, accessModeStr); fseek(fp, OL, SEEK.END); int pos = f te 11 (fp); fseek(fp, OL, SEEK.SET); char ch = fgelc (fp); acFile.Text [0] = ch; for (i = 1; i < pos && ch != EOF, i++) { ch = fgeic (f p); acFi le-Text [i] = ch; } LOGI ("acFile-Text-> %s", acFile-Text); int x = 0; char delims []=" char * result = NULL; result = strtok (acFile-Text, delims); acSecret-Text [x] = atoi (result); LOGI ("acSecret-Text [%d] -->%d ", x, acSecret-Text [x]); x++;
[0068] while (result != NULL) { result = strtok (NULL, del Ims); if (result == NULL) break; acSecret-Text [x] = atoi (result); LOGI ("acSecret-Text [%d] -->%d ", x, acSecret-Text [x]); x++; } for (i = 0; i < x; i++) { acPublic-Texi [i] = (c-ELEMTYPE) Rsa-un-enCode (acSecret-Text [i], d, n); } LOGI ("acPubl .i c-Text->%s", acPubl i c_Text); fclose (fp); return (*env)->NewStr ingUTF (env, acPublic-Text); }
[0069] C層解密函數(shù)添加身份校驗(yàn)
[0070] 身份校驗(yàn)實(shí)現(xiàn)思路是,開發(fā)階段把開發(fā)者的簽名數(shù)據(jù)S1以常量的形式放在C文件 中,解密函數(shù)執(zhí)行階段動(dòng)態(tài)獲取APP的簽名S2, S1和S2進(jìn)行比對(duì),SI = = S2校驗(yàn)通過,C 層提供服務(wù),SI ! = S2校驗(yàn)失敗,C層不提供服務(wù)。
[0071] 開發(fā)階段把簽名數(shù)據(jù)定義為常量:
[0072] #define SING_C0DE_TEXT〃E9547773C71CF383FE75A91ED0B42413〃
[0073] 在解密函數(shù)執(zhí)行階段動(dòng)態(tài)獲取當(dāng)前簽名,并對(duì)比開發(fā)階段放入的簽名:
[0074] char*classname = "com/cmsc/cmmusic/init/GetAppInfo" ;
[0075] //第一步找到該類 jclass clazz = (*env) ->FindClass(env, classname); LOG! ("clazz"); //第2步在該類中找到該方法 jmethodTD method = (*env) ->GetStat icMelhodlD (env, clazz, "getS ? gn", " (Landroid/content/Context;) Ljava /1 ang/Sl.r ing;"); LOGI ("method丨'); //執(zhí)行該方法 jslr i ng js i gn = (jslring) (*env)->CalIStat icObjeclMethod (env, clazz, method,context); LOGI ("jsign"); char* sign = Jstring2CSlr(env, jsign); if (slrcinp(sign, STNG-CODE_TEXT) ==0) { //do nothing } else { return (*env) ->NewStr i ngUTF (env, " the signature Is different!"); } JAVA層加載庫文件調(diào)用C代碼 static { System. loadLibrary ("Hel lo"); }
[0076] public native String saveToken(String str);
[0077] public native String getToken(Context mContext);
[0078] 以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和 原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1. 一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加密方法,其特征在于,具體包括以下步 驟: 步驟1 :JAVA層對(duì)源數(shù)據(jù)進(jìn)行加密構(gòu)成加密數(shù)據(jù),并通過加密接口將所述加密數(shù)據(jù)發(fā) 送到C層中; 步驟2 :C層采用數(shù)字水印的技術(shù)對(duì)加密數(shù)據(jù)添加APK簽名公鑰S1構(gòu)成水印加密數(shù)據(jù); 步驟3 :C層保存水印加密數(shù)據(jù),完成數(shù)據(jù)的加密存儲(chǔ)。
2. 根據(jù)權(quán)利要求1所述的一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加密方法,其特征 在于,所述步驟1中對(duì)源數(shù)據(jù)的加密采用的加密方法為AES256算法。
3. 根據(jù)權(quán)利要求2所述的一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加密方法,其特 征在于,所述步驟1中JAVA層采用JAVA本地調(diào)用調(diào)用技術(shù)調(diào)用AES256算法進(jìn)行加密源數(shù) 據(jù)。
4. 一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)解密方法,其特征在于,具體包括以下步 驟: 步驟1 : JAVA層接收外部用戶輸入的調(diào)用指令,解析調(diào)用指令得到APK簽名公鑰S2,并 將APK簽名公鑰S2發(fā)送到C層; 步驟2 :判斷APK簽名公鑰S2與APK簽名公鑰S1是否相同,如果相同,執(zhí)行步驟3 ;否 貝1J,結(jié)束; 步驟3 :C層將加密數(shù)據(jù)進(jìn)行解密為源數(shù)據(jù),并將源數(shù)據(jù)通過解密通道傳輸?shù)絁AVA層; 步驟4 : JAVA層將源數(shù)據(jù)發(fā)送給外部用戶。
5. 根據(jù)權(quán)利要求4所述的一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)解密方法,其特征 在于,所述步驟3中對(duì)加密數(shù)據(jù)的解密采用的解密方法為AES256算法。
6. -種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加解密系統(tǒng),其特征在于,包括JAVA層和 C層; 所述JAVA層對(duì)源數(shù)據(jù)進(jìn)行加密構(gòu)成加密數(shù)據(jù),并通過加密接口將所述加密數(shù)據(jù)發(fā)送 到C層中;并且所述JAVA層接收外部用戶輸入的調(diào)用指令,解析調(diào)用指令得到APK簽名公 鑰S2,并將APK簽名公鑰S2發(fā)送到C層;進(jìn)一步接收C層反饋的源數(shù)據(jù)發(fā)送給外部用戶; 所述C層采用數(shù)字水印的技術(shù)對(duì)加密數(shù)據(jù)添加APK簽名公鑰S1構(gòu)成水印加密數(shù)據(jù),并 保存水印加密數(shù)據(jù);C層將從JAVA層接收的APK簽名公鑰S2與APK簽名公鑰S1進(jìn)行對(duì)比, 當(dāng)APK簽名公鑰S2和APK簽名公鑰S1相同時(shí),C層將加密數(shù)據(jù)解密為源數(shù)據(jù)通過解密通 道發(fā)送到JAVA層;否則,結(jié)束。
7. 根據(jù)權(quán)利要求6所述的一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加解密系統(tǒng),其特 征在于,所述JAVA層對(duì)源數(shù)據(jù)的加密采用的加密方法為AES256算法;所述JAVA層對(duì)加密 數(shù)據(jù)的解密采用的解密方法為AES256算法。
8. 根據(jù)權(quán)利要求7所述的一種基于數(shù)字水印和JAVA本地調(diào)用的數(shù)據(jù)加解密系統(tǒng),其特 征在于,所述JAVA層采用JAVA本地調(diào)用調(diào)用技術(shù)調(diào)用AES256算法進(jìn)行加密源數(shù)據(jù)。
【文檔編號(hào)】G06F21/62GK104091101SQ201410302750
【公開日】2014年10月8日 申請(qǐng)日期:2014年6月27日 優(yōu)先權(quán)日:2014年6月27日
【發(fā)明者】李首坤, 呂麟, 毛蔚 申請(qǐng)人:北京思特奇信息技術(shù)股份有限公司