本發(fā)明涉及數(shù)字水印技術(shù)領(lǐng)域,尤其涉及一種數(shù)字水印加密方法及裝置。
背景技術(shù):
數(shù)字水印技術(shù)是將一些標識信息(即數(shù)字水印)嵌入數(shù)字載體(包括多媒體、文檔、軟件等)當中的技術(shù),常用于保護信息安全或者信息隱藏,因此得到廣泛應(yīng)用。在對數(shù)字載體進行數(shù)字水印加密時,一般是將數(shù)字水印直接嵌入到數(shù)字載體當中,這會占用數(shù)字載體的一定存儲空間,而當數(shù)字載體的可用存儲空間不足時,嵌入數(shù)字水印會影響數(shù)字載體的正常使用,因此,數(shù)字水印加密的可靠性并非很高。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的在于提出一種數(shù)字水印加密方法及裝置,旨在解決現(xiàn)有數(shù)字水印加密的可靠性不高的技術(shù)問題。
為實現(xiàn)上述目的,本發(fā)明提供的一種數(shù)字水印加密方法,所述數(shù)字水印加密方法包括以下步驟:
將數(shù)字水印添加預(yù)設(shè)的標識字符,以對所述數(shù)字水印進行標識處理,其中,所述數(shù)字水印為第一進制格式;
將標識處理后的所述數(shù)字水印進行第二進制格式轉(zhuǎn)換,生成所述數(shù)字水印對應(yīng)的第二進制格式的第一字符串;
按照預(yù)設(shè)順序依次提取所述第一字符串中的每一位字符,并根據(jù)每次提取的字符,依次對待加密文件中與提取的所述字符對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理,生成所述待加密文件對應(yīng)的加密文件,其中,所述待加密文件包括多個節(jié)點。
優(yōu)選地,所述將數(shù)字水印添加預(yù)設(shè)的標識字符的步驟包括:
在所述數(shù)字水印的頭部位置和尾部位置添加所述標識字符。
優(yōu)選地,當所述第二進制格式為二進制格式時,所述按照預(yù)設(shè)順序依次提取所述第一字符串中的每一位字符,并根據(jù)每次提取的字符,依次對待加密文件中與提取的所述字符對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理的步驟包括:
按照預(yù)設(shè)順序依次提取二進制格式的所述第一字符串中的每一位字符;
若當前提取的所述字符為二進制字符0,則維持所述待加密文件中與當前提取的所述字符對應(yīng)的節(jié)點不變;
若當前提取的所述字符為二進制字符1,則在所述待加密文件中與當前提取的所述字符對應(yīng)的節(jié)點的尾部位置添加一位空格字符。
優(yōu)選地,所述依次對待加密文件中與提取的所述字符對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理,生成所述待加密文件對應(yīng)的加密文件的步驟之后,還包括:
依次提取所述加密文件的每一個節(jié)點,并確定與提取的每一個節(jié)點對應(yīng)的第二進制格式的字符,將確定的字符組成第二進制格式的第二字符串;
對所述第二字符串進行第一進制格式轉(zhuǎn)換,生成第一進制格式的第三字符串,所述第三字符串中包含攜帶有所述標識字符的數(shù)字水??;
查找所述第三字符串中包含的所述標識字符,并根據(jù)所述標識字符獲取所述數(shù)字水印。
優(yōu)選地,所述查找所述第三字符串中包含的所述標識字符,并根據(jù)所述標識字符獲取所述數(shù)字水印的步驟包括:
查找所述第三字符串中包含的兩個所述標識字符;
提取兩個所述標識字符之間的字符信息,所述字符信息為所述數(shù)字水印。
此外,為實現(xiàn)上述目的,本發(fā)明還提出一種數(shù)字水印加密裝置,所述數(shù)字水印加密裝置包括:
標識模塊,用于將數(shù)字水印添加預(yù)設(shè)的標識字符,以對所述數(shù)字水印進行標識處理,其中,所述數(shù)字水印為第一進制格式;
轉(zhuǎn)換模塊,用于將標識處理后的所述數(shù)字水印進行第二進制格式轉(zhuǎn)換,生成所述數(shù)字水印對應(yīng)的第二進制格式的第一字符串;
處理模塊,用于按照預(yù)設(shè)順序依次提取所述第一字符串中的每一位字符,并根據(jù)每次提取的字符,依次對待加密文件中與提取的所述字符對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理,生成所述待加密文件對應(yīng)的加密文件,其中,所述待加密文件包括多個節(jié)點。
優(yōu)選地,所述標識模塊用于:
在所述數(shù)字水印的頭部位置和尾部位置添加所述標識字符。
優(yōu)選地,當所述第二進制格式為二進制格式時,所述處理模塊包括:
提取單元,用于按照預(yù)設(shè)順序依次提取二進制格式的所述第一字符串中的每一位字符;
處理單元,用于若當前提取的所述字符為二進制字符0,則維持所述待加密文件中與當前提取的所述字符對應(yīng)的節(jié)點不變;若當前提取的所述字符為二進制字符1,則在所述待加密文件中與當前提取的所述字符對應(yīng)的節(jié)點的尾部位置添加一位空格字符。
優(yōu)選地,所述處理模塊,還用于依次提取所述加密文件的每一個節(jié)點,并確定與提取的每一個節(jié)點對應(yīng)的第二進制格式的字符,將確定的字符組成第二進制格式的第二字符串;
所述轉(zhuǎn)換模塊,還用于對所述第二字符串進行第一進制格式轉(zhuǎn)換,生成第一進制格式的第三字符串,所述第三字符串中包含攜帶有所述標識字符的數(shù)字水?。?/p>
所述數(shù)字水印加密裝置還包括:
獲取模塊,用于查找所述第三字符串中包含的所述標識字符,并根據(jù)所述標識字符獲取所述數(shù)字水印。
優(yōu)選地,所述獲取模塊包括:
查找單元,用于查找所述第三字符串中包含的兩個所述標識字符;
獲取單元,用于提取兩個所述標識字符之間的字符信息,所述字符信息為所述數(shù)字水印。
本發(fā)明提出的數(shù)字水印加密方法和裝置,當要對待加密文件進行數(shù)字水印加密時,首先將第一進制格式的數(shù)字水印添加預(yù)設(shè)的標識字符,然后對數(shù)字水印進行第二進制格式轉(zhuǎn)換,生成數(shù)字水印對應(yīng)的第二進制格式的第一字符串,之后按照預(yù)設(shè)順序依次提取第一字符串中的每一位字符,并根據(jù)每次提取的字符,依次對待加密文件中與提取的字符所對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理,處理完成后生成該待加密文件對應(yīng)的加密文件,因此,加密過程只是對待加密文件的節(jié)點進行處理,而并沒有將數(shù)字水印直接嵌入到待加密文件中,避免了由于嵌入數(shù)字水印占用存儲空間而影響待加密文件使用的問題,從而提高了數(shù)字水印加密的可靠性。
附圖說明
圖1為本發(fā)明數(shù)字水印加密方法第一實施例的流程示意圖;
圖2為本發(fā)明數(shù)字水印加密方法第二實施例的流程示意圖;
圖3為本發(fā)明數(shù)字水印加密裝置第一實施例的功能模塊示意圖;
圖4為本發(fā)明數(shù)字水印加密裝置第一實施例中處理模塊的細化功能模塊示意圖
圖5為本發(fā)明數(shù)字水印加密裝置第二實施例的功能模塊示意圖;
圖6為本發(fā)明數(shù)字水印加密裝置第二實施例中獲取模塊的細化功能模塊示意圖。
本發(fā)明目的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種數(shù)字水印加密方法,參照圖1,圖1為本發(fā)明數(shù)字水印加密方法第一實施例的流程示意圖。
在該實施例中,所述數(shù)字水印加密方法包括以下步驟:
步驟S10,將數(shù)字水印添加預(yù)設(shè)的標識字符,以對所述數(shù)字水印進行標識處理,其中,所述數(shù)字水印為第一進制格式;
數(shù)字水印技術(shù)是將一些標識信息(即數(shù)字水印)嵌入數(shù)字載體當中(包括多媒體、文檔、軟件等)或是間接表示(修改特定區(qū)域的結(jié)構(gòu)),且不影響原載體的使用價值,也不容易被探知和再次修改,但可以被生產(chǎn)方識別和辨認的技術(shù),常用于保護信息安全或者信息隱藏。本實施例中,采用數(shù)字水印對待加密文件進行加密處理,其中,該待加密文件包括多媒體、文檔、軟件等等。
首先,對數(shù)字水印進行標識處理,將數(shù)字水印添加預(yù)設(shè)的標識字符,比如,預(yù)先設(shè)置數(shù)字水印對應(yīng)的標識字符為“#”,本領(lǐng)域技術(shù)人員可以理解的是,也可以設(shè)置標識字符為其他字符,在此不作限制。其中,數(shù)字水印為第一進制格式,比如,數(shù)字水印為十進制格式。
可選地,所述步驟S10包括:
在所述數(shù)字水印的頭部位置和尾部位置添加所述標識字符。
當對數(shù)字水印進行標識處理時,在數(shù)字水印的頭部位置和尾部位置添加預(yù)設(shè)的標識字符,比如,在數(shù)字水印的頭部位置和尾部位置分別添加字符“#”,以對數(shù)字水印進行標識處理。
步驟S20,將標識處理后的所述數(shù)字水印進行第二進制格式轉(zhuǎn)換,生成所述數(shù)字水印對應(yīng)的第二進制格式的第一字符串;
當對數(shù)字水印進行標識處理之后,將標識處理后的數(shù)字水印進行第二進制格式轉(zhuǎn)換,生成該數(shù)字水印對應(yīng)的第二進制格式的第一字符串。比如,若第二進制格式為二進制格式,則將標識處理后的數(shù)字水印進行二進制格式轉(zhuǎn)換,生成該數(shù)字水印對應(yīng)的二進制格式的第一字符串,也即生成二進制01字符串。
步驟S30,按照預(yù)設(shè)順序依次提取所述第一字符串中的每一位字符,并根據(jù)每次提取的字符,依次對所述待加密文件中與提取的所述字符對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理,生成所述待加密文件對應(yīng)的加密文件,其中,所述待加密文件包括多個節(jié)點。
本實施例中,當生成第二進制格式的第一字符串之后,按照預(yù)設(shè)順序依次提取該第一字符串中的每一位字符,比如按照從高位到低位的順序依次提取該第一字符串的每一位字符,可以理解的是,也可以按照從低位到高位的順序依次提取該第一字符串的每一位字符。由于待加密文件包含多個節(jié)點,根據(jù)每次提取的字符,依次對待加密文件中與提取的字符對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理。比如,根據(jù)提取的第一位字符,對待加密文件中的第一個節(jié)點進行相應(yīng)處理,根據(jù)提取的第二位字符,對待加密文件中的第二個節(jié)點進行相應(yīng)處理,按照此方式依次根據(jù)提取的每一位字符,對待加密文件中與該字符對應(yīng)的節(jié)點進行相應(yīng)處理。當根據(jù)第一字符串中的每位字符對待加密文件中與每位字符對應(yīng)的節(jié)點進行相應(yīng)處理完成之后,也即完成對待加密文件的加密處理,生成該待加密文件對應(yīng)的加密文件。
可選地,在第二進制格式為二進制格式時,所述步驟S30包括:
步驟a,按照預(yù)設(shè)順序依次提取二進制格式的所述第一字符串中的每一位字符;
步驟b,若當前提取的所述字符為二進制字符0,則維持所述待加密文件中與當前提取的所述字符對應(yīng)的節(jié)點不變;
步驟c,若當前提取的所述字符為二進制字符1,則在所述待加密文件中與當前提取的所述字符對應(yīng)的節(jié)點的尾部位置添加一位空格字符。
在第二進制格式為二進制格式時,對標識處理后的數(shù)字水印進行二進制格式轉(zhuǎn)換,生成該數(shù)字水印對應(yīng)的二進制格式的第一字符串,然后按照預(yù)設(shè)順序依次提取二進制格式的第一字符串中的每一位字符,也即提取二進制字符0和二進制字符1。若當前提取的字符為二進制字符0,則維持待加密文件中與當前提取的字符對應(yīng)的節(jié)點不變;若當前提取的字符為二進制字符1,則在待加密文件中與當前提取的字符對應(yīng)的節(jié)點的尾部位置添加一位空格字符。按照此方式依次根據(jù)提取的第一字符串中的每一位字符,對待加密文件中與該字符對應(yīng)的節(jié)點進行相應(yīng)處理。
下面以安卓應(yīng)用的apk(AndroidPackage,安卓安裝包)文件為例,對本發(fā)明數(shù)字水印加密方法進行詳細說明。
當用戶需要對某一款安卓應(yīng)用的apk文件進行數(shù)字水印加密時,用戶首先對數(shù)字水印進行標識處理,比如在數(shù)字水印的頭部位置和尾部位置分別添加字符“#”。然后對添加了標識字符的數(shù)字水印進行進制格式轉(zhuǎn)換,比如對添加了標識字符的數(shù)字水印進行二進制格式轉(zhuǎn)換,生成二進制格式的第一字符串,也即二進制01字符串。
由于apk文件是一個zip壓縮包,因此,要對該apk文件進行解壓,解壓后的apk文件包括AndroidManifest.xml文件、META-INF目錄文件、res目錄文件、lib目錄文件、assets目錄文件、classes.dex文件、resources.arsc文件。
其中,AndroidManifest.xml文件是每個安卓應(yīng)用都必須定義和包含的,它描述了安卓應(yīng)用的名字、版本、權(quán)限、引用的庫文件等等信息;META-INF目錄文件下存放的是簽名信息,用來保證apk包的完整性和系統(tǒng)的安全;res目錄文件存放資源文件、布局文件等,其中,drawable存放資源文件,layout、xml存放布局文件;lib目錄文件下的子目錄armeabi存放的是一些so文件;assets目錄文件存放一些配置文件;classes.dex文件是Java源碼編譯后的代碼文件;resources.arsc文件是編譯后的資源文件,大多數(shù)情況下,需要漢化的單詞、語句絕大多數(shù)都在這個文件里,漢化的時候首先就要看這個文件。
由于xml文件有巨大的冗余空間,便于嵌入數(shù)字水印等信息,因此,在對apk文件解壓后,獲取res目錄文件下的xml文件。獲取的該xml文件是經(jīng)過編譯生成的二進制文件,也即該xml文件為二進制格式,因此,在獲取到該xml文件后,先對該xml文件進行十進制格式轉(zhuǎn)換,獲取到格式轉(zhuǎn)換后的十進制格式xml文件。
之后,按照預(yù)設(shè)順序依次提取第一字符串中的每一位字符,也即提取二進制字符0和二進制字符1。若當前提取的字符為二進制字符0,則維持十進制格式xml文件中與當前提取的字符對應(yīng)的item節(jié)點不變;若當前提取的字符為二進制字符1,則在十進制格式xml文件中與當前提取的字符對應(yīng)的item節(jié)點的尾部位置添加一位空格字符。按照此方式依次根據(jù)提取第一字符串中的每一位字符,對十進制格式xml文件中與每一位字符對應(yīng)的item節(jié)點進行相應(yīng)處理,生成加密后的xml文件。
例如,若提取的第一位字符為二進制字符1,則在十進制格式xml文件的第一個item節(jié)點的尾部位置添加一位空格字符;若提取的第二位字符為二進制字符0,則維持十進制格式xml文件的第二個item節(jié)點不變。按照此方式依次根據(jù)提取的每一位字符,對十進制格式xml文件中與每一位字符對應(yīng)的item節(jié)點進行相應(yīng)處理。
加密完成之后,將加密后的xml文件進行二進制格式轉(zhuǎn)換,然后將二進制格式轉(zhuǎn)換后的xml文件與其他AndroidManifest.xml文件、META-INF目錄文件、resources.arsc文件等各個文件一起壓縮打包,生成加密后的apk文件。進一步地,由于有些apk文件需要通過簽名進行校驗,因此,在生成加密apk文件之后,對該加密apk文件進行簽名處理。
本實施例提供的方案,當要對待加密文件進行數(shù)字水印加密時,首先將第一進制格式的數(shù)字水印添加預(yù)設(shè)的標識字符,然后對數(shù)字水印進行第二進制格式轉(zhuǎn)換,生成數(shù)字水印對應(yīng)的第二進制格式的第一字符串,之后按照預(yù)設(shè)順序依次提取第一字符串中的每一位字符,并根據(jù)每次提取的字符,依次對待加密文件中與提取的字符所對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理,處理完成后生成該待加密文件對應(yīng)的加密文件,因此,加密過程只是對待加密文件的節(jié)點進行處理,而并沒有將數(shù)字水印直接嵌入到待加密文件中,避免了由于嵌入數(shù)字水印占用存儲空間而影響待加密文件使用的問題,從而提高了數(shù)字水印加密的可靠性。
進一步地,如圖2所示,基于第一實施例提出本發(fā)明數(shù)字水印加密方法第二實施例,在本實施例中,所述步驟S30之后,還包括:
步驟S40,依次提取所述加密文件的每一個節(jié)點,并確定與提取的每一個節(jié)點對應(yīng)的第二進制格式的字符,將確定的字符組成第二進制格式的第二字符串;
步驟S50,對所述第二字符串進行第一進制格式轉(zhuǎn)換,生成第一進制格式的第三字符串,所述第三字符串中包含攜帶有所述標識字符的數(shù)字水?。?/p>
步驟S60,查找所述第三字符串中包含的所述標識字符,并根據(jù)所述標識字符獲取所述數(shù)字水印。
在本實施例中,要提取第一實施例中生成的加密文件所對應(yīng)的數(shù)字水印時,首先依次提取該加密文件的每一個節(jié)點,由于加密文件中的節(jié)點是根據(jù)第二進制格式的第一字符串中的每一位字符進行相應(yīng)處理過的,因此,根據(jù)提取的節(jié)點,可確定與提取的該節(jié)點對應(yīng)的第二進制格式的字符。在依次確定出與提取的每一個節(jié)點對應(yīng)的第二進制格式的字符之后,將確定的第二進制格式的字符組成第二進制格式的第二字符串,該第二字符串中包含了第二進制格式的第一字符串。
之后,對第二進制格式的該第二字符串進行第一進制格式轉(zhuǎn)換,生成第一進制格式的第三字符串。在對第二字符串進行第一進制格式轉(zhuǎn)換時,也即對第二進制格式的第一字符串進行了第一進制格式轉(zhuǎn)換,而第一字符串進行第一進制格式轉(zhuǎn)換之后會生成攜帶有標識字符的數(shù)字水印,也即第三字符串中包含了攜帶有標識字符的數(shù)字水印。從該第三字符串中查找出該標識字符,當查找到該標識字符時,根據(jù)該標識字符,獲取到數(shù)字水印。
可選地,若在對待加密文件進行數(shù)字水印加密的過程中,在數(shù)字水印的頭部位置和尾部位置添加了標識字符,則生成的第三字符串中包含有兩個標識字符。此時,所述步驟S60包括:
步驟d,查找所述第三字符串中包含的兩個所述標識字符;
步驟e,提取兩個所述標識字符之間的字符信息,所述字符信息為所述數(shù)字水印。
當生成第三字符串后,從第三字符串中查找出其包含的兩個標識字符,然后提取出該兩個標識字符之間的字符信息,該字符信息即為待加密文件在進行數(shù)字水印加密時所采用的數(shù)字水印,也即實現(xiàn)了從加密文件中提取出數(shù)字水印。
下面以加密apk文件為例,對本實施例中的數(shù)字水印加密方法進行詳細說明。
當用戶要從加密apk文件中提取出數(shù)字水印時,首先對該加密apk文件進行解壓,獲取解壓后的res目錄文件下的xml文件。由于該xml文件是二進制格式的,因此,對該xml文件進行十進制格式轉(zhuǎn)換,生成格式轉(zhuǎn)換后的十進制格式xml文件。然后依次提取十進制格式xml文件中的item節(jié)點,并根據(jù)提取的item節(jié)點,確定與該item節(jié)點對應(yīng)的二進制字符。例如,判斷提取的每一個item節(jié)點的尾部位置是否有一位空格字符,當item節(jié)點的尾部位置有一位空格字符時,確定該item節(jié)點對應(yīng)二進制字符1;當item節(jié)點的尾部位置沒有空格字符時,確定該item節(jié)點對應(yīng)二進制字符0。在確定每一個item節(jié)點對應(yīng)的二進制字符之后,將確定的字符組成第二進制格式的第二字符串。
然后,將該第二字符串進行十進制格式轉(zhuǎn)換,生成十進制的第三字符串,該第三字符中包含了攜帶標識字符的數(shù)字水印。從該第三字符串中查找出標識字符,并根據(jù)標識字符獲取數(shù)字水印。比如,若在對apk文件進行數(shù)字水印加密的過程中,在數(shù)字水印的頭部位置和尾部位置添加了標識字符,則在第三字符串中查找出兩個標識字符,提取出該兩個標識字符之間的字符信息,該字符信息就是在對apk文件進行數(shù)字水印加密時所采用的數(shù)字水印,也即完成了從加密apk文件中提取出數(shù)字水印。
本實施例提供的方案,要提取加密文件所對應(yīng)的數(shù)字水印時,首先依次提取該加密文件的每一個節(jié)點,并確定與提取的每一個節(jié)點對應(yīng)的第二進制格式的字符,將確定的字符組成第二進制格式的第二字符串,然后對該第二字符串進行第一進制格式轉(zhuǎn)換,生成第一進制格式的第三字符串,該第三字符串中就包含攜帶有標識字符的數(shù)字水印,從第三字符串中查找出標識字符后,根據(jù)標識字符獲取到數(shù)字水印,因此,本實施例的方案不僅實現(xiàn)了數(shù)字水印加密,而且還實現(xiàn)了加密文件的數(shù)字水印提取。
本發(fā)明提供一種數(shù)字水印加密裝置。
參照圖3,圖3為本發(fā)明數(shù)字水印加密裝置第一實施例的功能模塊示意圖。
需要強調(diào)的是,對本領(lǐng)域的技術(shù)人員來說,圖4所示功能模塊圖僅僅是一個較佳實施例的示例圖,本領(lǐng)域的技術(shù)人員圍繞圖4所示的數(shù)字水印加密裝置的功能模塊,可輕易進行新的功能模塊的補充;各功能模塊的名稱是自定義名稱,僅用于輔助理解該數(shù)字水印加密裝置的各個程序功能塊,不用于限定本發(fā)明的技術(shù)方案,本發(fā)明技術(shù)方案的核心是,各自定義名稱的功能模塊所要達成的功能。
在本實施例中,所述數(shù)字水印加密裝置包括:
標識模塊10,用于將數(shù)字水印添加預(yù)設(shè)的標識字符,以對所述數(shù)字水印進行標識處理,其中,所述數(shù)字水印為第一進制格式;
數(shù)字水印技術(shù)是將一些標識信息(即數(shù)字水印)嵌入數(shù)字載體當中(包括多媒體、文檔、軟件等)或是間接表示(修改特定區(qū)域的結(jié)構(gòu)),且不影響原載體的使用價值,也不容易被探知和再次修改,但可以被生產(chǎn)方識別和辨認的技術(shù),常用于保護信息安全或者信息隱藏。本實施例中,采用數(shù)字水印對待加密文件進行加密處理,其中,該待加密文件包括多媒體、文檔、軟件等等。
首先,標識模塊10對數(shù)字水印進行標識處理,將數(shù)字水印添加預(yù)設(shè)的標識字符,比如,預(yù)先設(shè)置數(shù)字水印對應(yīng)的標識字符為“#”,本領(lǐng)域技術(shù)人員可以理解的是,也可以設(shè)置標識字符為其他字符,在此不作限制。其中,數(shù)字水印為第一進制格式,比如,數(shù)字水印為十進制格式。
可選地,所述標識模塊10具體用于:
在所述數(shù)字水印的頭部位置和尾部位置添加所述標識字符。
當對數(shù)字水印進行標識處理時,標識模塊10在數(shù)字水印的頭部位置和尾部位置添加預(yù)設(shè)的標識字符,比如,標識模塊10在數(shù)字水印的頭部位置和尾部位置分別添加字符“#”,以對數(shù)字水印進行標識處理。
轉(zhuǎn)換模塊20,用于將標識處理后的所述數(shù)字水印進行第二進制格式轉(zhuǎn)換,生成所述數(shù)字水印對應(yīng)的第二進制格式的第一字符串;
當標識模塊10對數(shù)字水印進行標識處理之后,轉(zhuǎn)換模塊20將標識處理后的數(shù)字水印進行第二進制格式轉(zhuǎn)換,生成該數(shù)字水印對應(yīng)的第二進制格式的第一字符串。比如,若第二進制格式為二進制格式,則轉(zhuǎn)換模塊20將標識處理后的數(shù)字水印進行二進制格式轉(zhuǎn)換,生成該數(shù)字水印對應(yīng)的二進制格式的第一字符串,也即生成二進制01字符串。
處理模塊30,用于按照預(yù)設(shè)順序依次提取所述第一字符串中的每一位字符,并根據(jù)每次提取的字符,依次對待加密文件中與提取的所述字符對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理,生成所述待加密文件對應(yīng)的加密文件,其中,所述待加密文件包括多個節(jié)點。
本實施例中,當生成第二進制格式的第一字符串之后,處理模塊30按照預(yù)設(shè)順序依次提取該第一字符串中的每一位字符,比如按照從高位到低位的順序依次提取該第一字符串的每一位字符,可以理解的是,也可以按照從低位到高位的順序依次提取該第一字符串的每一位字符。由于待加密文件包含多個節(jié)點,根據(jù)每次提取的字符,處理模塊30依次對待加密文件中與提取的字符對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理。比如,處理模塊30根據(jù)提取的第一位字符,對待加密文件中的第一個節(jié)點進行相應(yīng)處理,根據(jù)提取的第二位字符,對待加密文件中的第二個節(jié)點進行相應(yīng)處理,處理模塊30按照此方式依次根據(jù)提取的每一位字符,對待加密文件中與該字符對應(yīng)的節(jié)點進行相應(yīng)處理。當根據(jù)第一字符串中的每位字符對待加密文件中與每位字符對應(yīng)的節(jié)點進行相應(yīng)處理完成之后,也即完成對待加密文件的加密處理,生成該待加密文件對應(yīng)的加密文件。
可選地,如圖4所示,在第二進制格式為二進制格式時,所述處理模塊30包括:
提取單元31,用于按照預(yù)設(shè)順序依次提取二進制格式的所述第一字符串中的每一位字符;
處理單元32,用于若當前提取的所述字符為二進制字符0,則維持所述待加密文件中與當前提取的所述字符對應(yīng)的節(jié)點不變;若當前提取的所述字符為二進制字符1,則在所述待加密文件中與當前提取的所述字符對應(yīng)的節(jié)點的尾部位置添加一位空格字符。
在第二進制格式為二進制格式時,轉(zhuǎn)換模塊20對標識處理后的數(shù)字水印進行二進制格式轉(zhuǎn)換,生成該數(shù)字水印對應(yīng)的二進制格式的第一字符串,然后提取單元31按照預(yù)設(shè)順序依次提取二進制格式的第一字符串中的每一位字符,也即提取二進制字符0和二進制字符1。若當前提取的字符為二進制字符0,則處理單元32維持待加密文件中與當前提取的字符對應(yīng)的節(jié)點不變;若當前提取的字符為二進制字符1,則處理單元32在待加密文件中與當前提取的字符對應(yīng)的節(jié)點的尾部位置添加一位空格字符。處理單元32按照此方式依次根據(jù)提取的第一字符串中的每一位字符,對待加密文件中與該字符對應(yīng)的節(jié)點進行相應(yīng)處理。
下面以安卓應(yīng)用的apk(AndroidPackage,安卓安裝包)文件為例,對本發(fā)明數(shù)字水印加密裝置進行詳細說明。
當用戶需要對某一款安卓應(yīng)用的apk文件進行數(shù)字水印加密時,標識模塊10首先對數(shù)字水印進行標識處理,比如在數(shù)字水印的頭部位置和尾部位置分別添加字符“#”。然后轉(zhuǎn)換模塊20對添加了標識字符的數(shù)字水印進行進制格式轉(zhuǎn)換,比如對添加了標識字符的數(shù)字水印進行二進制格式轉(zhuǎn)換,生成二進制格式的第一字符串,也即二進制01字符串。
由于apk文件是一個zip壓縮包,因此,要對該apk文件進行解壓,解壓后的apk文件包括AndroidManifest.xml文件、META-INF目錄文件、res目錄文件、lib目錄文件、assets目錄文件、classes.dex文件、resources.arsc文件。
其中,AndroidManifest.xml文件是每個安卓應(yīng)用都必須定義和包含的,它描述了安卓應(yīng)用的名字、版本、權(quán)限、引用的庫文件等等信息;META-INF目錄文件下存放的是簽名信息,用來保證apk包的完整性和系統(tǒng)的安全;res目錄文件存放資源文件、布局文件等,其中,drawable存放資源文件,layout、xml存放布局文件;lib目錄文件下的子目錄armeabi存放的是一些so文件;assets目錄文件存放一些配置文件;classes.dex文件是Java源碼編譯后的代碼文件;resources.arsc文件是編譯后的資源文件,大多數(shù)情況下,需要漢化的單詞、語句絕大多數(shù)都在這個文件里,漢化的時候首先就要看這個文件。
由于xml文件有巨大的冗余空間,便于嵌入數(shù)字水印等信息,因此,在對apk文件解壓后,獲取res目錄文件下的xml文件。獲取的該xml文件是經(jīng)過編譯生成的二進制文件,也即該xml文件為二進制格式,因此,在獲取到該xml文件后,轉(zhuǎn)換模塊20先對該xml文件進行十進制格式轉(zhuǎn)換,獲取到格式轉(zhuǎn)換后的十進制格式xml文件。
之后,處理模塊30按照預(yù)設(shè)順序依次提取第一字符串中的每一位字符,也即提取二進制字符0和二進制字符1。若當前提取的字符為二進制字符0,則維持十進制格式xml文件中與當前提取的字符對應(yīng)的item節(jié)點不變;若當前提取的字符為二進制字符1,則在十進制格式xml文件中與當前提取的字符對應(yīng)的item節(jié)點的尾部位置添加一位空格字符。按照此方式依次根據(jù)提取第一字符串中的每一位字符,對十進制格式xml文件中與每一位字符對應(yīng)的item節(jié)點進行相應(yīng)處理,生成加密后的xml文件。
例如,若提取的第一位字符為二進制字符1,則處理模塊30在十進制格式xml文件的第一個item節(jié)點的尾部位置添加一位空格字符;若提取的第二位字符為二進制字符0,則處理模塊30維持十進制格式xml文件的第二個item節(jié)點不變。按照此方式依次根據(jù)提取的每一位字符,對十進制格式xml文件中與每一位字符對應(yīng)的item節(jié)點進行相應(yīng)處理。
加密完成之后,轉(zhuǎn)換模塊20將加密后的xml文件進行二進制格式轉(zhuǎn)換,然后將二進制格式轉(zhuǎn)換后的xml文件與其他AndroidManifest.xml文件、META-INF目錄文件、resources.arsc文件等各個文件一起壓縮打包,生成加密后的apk文件。進一步地,由于有些apk文件需要通過簽名進行校驗,因此,在生成加密apk文件之后,對該加密apk文件進行簽名處理。
本實施例提供的方案,當要對待加密文件進行數(shù)字水印加密時,首先標識模塊10將第一進制格式的數(shù)字水印添加預(yù)設(shè)的標識字符,然后轉(zhuǎn)換模塊20對數(shù)字水印進行第二進制格式轉(zhuǎn)換,生成數(shù)字水印對應(yīng)的第二進制格式的第一字符串,之后處理模塊30按照預(yù)設(shè)順序依次提取第一字符串中的每一位字符,并根據(jù)每次提取的字符,依次對待加密文件中與提取的字符所對應(yīng)的節(jié)點執(zhí)行相應(yīng)處理,處理完成后生成該待加密文件對應(yīng)的加密文件,因此,加密過程只是對待加密文件的節(jié)點進行處理,而并沒有將數(shù)字水印直接嵌入到待加密文件中,避免了由于嵌入數(shù)字水印占用存儲空間而影響待加密文件使用的問題,從而提高了數(shù)字水印加密的可靠性。
進一步地,如圖5所示,基于第一實施例提出本發(fā)明數(shù)字水印加密裝置第二實施例,在本實施例中,所述處理模塊30還用于:
依次提取所述加密文件的每一個節(jié)點,并確定與提取的每一個節(jié)點對應(yīng)的第二進制格式的字符,將確定的字符組成第二進制格式的第二字符串;
所述轉(zhuǎn)換模塊20還用于:
對所述第二字符串進行第一進制格式轉(zhuǎn)換,生成第一進制格式的第三字符串,所述第三字符串中包含攜帶有所述標識字符的數(shù)字水??;
所述數(shù)字水印加密裝置還包括:
獲取模塊40,用于查找所述第三字符串中包含的所述標識字符,并根據(jù)所述標識字符獲取所述數(shù)字水印。
在本實施例中,要提取第一實施例中生成的加密文件所對應(yīng)的數(shù)字水印時,首先處理模塊30依次提取該加密文件的每一個節(jié)點,由于加密文件中的節(jié)點是根據(jù)第二進制格式的第一字符串中的每一位字符進行相應(yīng)處理過的,因此,根據(jù)提取的節(jié)點,可確定與提取的該節(jié)點對應(yīng)的第二進制格式的字符。在依次確定出與提取的每一個節(jié)點對應(yīng)的第二進制格式的字符之后,將確定的第二進制格式的字符組成第二進制格式的第二字符串,該第二字符串中包含了第二進制格式的第一字符串。
之后,轉(zhuǎn)換模塊20對第二進制格式的該第二字符串進行第一進制格式轉(zhuǎn)換,生成第一進制格式的第三字符串。在對第二字符串進行第一進制格式轉(zhuǎn)換時,也即對第二進制格式的第一字符串進行了第一進制格式轉(zhuǎn)換,而第一字符串進行第一進制格式轉(zhuǎn)換之后會生成攜帶有標識字符的數(shù)字水印,也即第三字符串中包含了攜帶有標識字符的數(shù)字水印。獲取模塊40從該第三字符串中查找出該標識字符,當查找到該標識字符時,根據(jù)該標識字符,獲取到數(shù)字水印。
可選地,若在對待加密文件進行數(shù)字水印加密的過程中,標識模塊10在數(shù)字水印的頭部位置和尾部位置添加了標識字符,則生成的第三字符串中包含有兩個標識字符。此時,如圖6所示,所述獲取模塊40包括:
查找單元41,用于查找所述第三字符串中包含的兩個所述標識字符;
獲取單元42,用于提取兩個所述標識字符之間的字符信息,所述字符信息為所述數(shù)字水印。
當生成第三字符串后,查找單元41從第三字符串中查找出其包含的兩個標識字符,然后獲取單元42提取出該兩個標識字符之間的字符信息,該字符信息即為待加密文件在進行數(shù)字水印加密時所采用的數(shù)字水印,也即實現(xiàn)了從加密文件中提取出數(shù)字水印。
下面以加密apk文件為例,對本實施例中的數(shù)字水印加密裝置進行詳細說明。
當用戶要從加密apk文件中提取出數(shù)字水印時,首先對該加密apk文件進行解壓,獲取解壓后的res目錄文件下的xml文件。由于該xml文件是二進制格式的,因此,轉(zhuǎn)換模塊20對該xml文件進行十進制格式轉(zhuǎn)換,生成格式轉(zhuǎn)換后的十進制格式xml文件。然后處理模塊30依次提取十進制格式xml文件中的item節(jié)點,并根據(jù)提取的item節(jié)點,確定與該item節(jié)點對應(yīng)的二進制字符。例如,處理模塊30判斷提取的每一個item節(jié)點的尾部位置是否有一位空格字符,當item節(jié)點的尾部位置有一位空格字符時,確定該item節(jié)點對應(yīng)二進制字符1;當item節(jié)點的尾部位置沒有空格字符時,確定該item節(jié)點對應(yīng)二進制字符0。在確定每一個item節(jié)點對應(yīng)的二進制字符之后,將確定的字符組成第二進制格式的第二字符串。
然后,轉(zhuǎn)換模塊20將該第二字符串進行十進制格式轉(zhuǎn)換,生成十進制的第三字符串,該第三字符中包含了攜帶標識字符的數(shù)字水印。獲取模塊40從該第三字符串中查找出標識字符,并根據(jù)標識字符獲取數(shù)字水印。比如,若在對apk文件進行數(shù)字水印加密的過程中,標識模塊10在數(shù)字水印的頭部位置和尾部位置添加了標識字符,則獲取模塊40在第三字符串中查找出兩個標識字符,提取出該兩個標識字符之間的字符信息,該字符信息就是在對apk文件進行數(shù)字水印加密時所采用的數(shù)字水印,也即完成了從加密apk文件中提取出數(shù)字水印。
本實施例提供的方案,要提取加密文件所對應(yīng)的數(shù)字水印時,首先處理模塊30依次提取該加密文件的每一個節(jié)點,并確定與提取的每一個節(jié)點對應(yīng)的第二進制格式的字符,將確定的字符組成第二進制格式的第二字符串,然后轉(zhuǎn)換模塊20對該第二字符串進行第一進制格式轉(zhuǎn)換,生成第一進制格式的第三字符串,該第三字符串中就包含攜帶有標識字符的數(shù)字水印,獲取模塊40從第三字符串中查找出標識字符后,根據(jù)標識字符獲取到數(shù)字水印,因此,本實施例的方案不僅實現(xiàn)了數(shù)字水印加密,而且還實現(xiàn)了加密文件的數(shù)字水印提取。
需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其它變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其它要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,計算機,服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其它相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。