本發(fā)明屬于通信技術(shù)領(lǐng)域,尤其涉及一種保護(hù)模塊文件的方法及客戶(hù)端。
背景技術(shù):
目前,軟件開(kāi)發(fā)過(guò)程中通常會(huì)采用模塊化開(kāi)發(fā),將軟件的功能進(jìn)行模塊化拆分,不同的模塊負(fù)責(zé)不同的功能。同時(shí)在設(shè)計(jì)模塊時(shí)盡可能的使得模塊松耦合,使得模塊能夠獨(dú)立使用,從而給模塊的使用者提供了極大的方便。
當(dāng)程序發(fā)布時(shí),程序主框架則會(huì)加載一個(gè)個(gè)獨(dú)立的模塊來(lái)實(shí)現(xiàn)整個(gè)程序的功能。對(duì)于windows客戶(hù)端來(lái)說(shuō),程序則是一個(gè)動(dòng)態(tài)鏈接庫(kù)文件(dll,dynamiclinklibrary)。由于在程序發(fā)布到客戶(hù)端后,使用者可以從客戶(hù)端的安裝目錄中獲取到一個(gè)個(gè)獨(dú)立的dll文件,那么對(duì)于第三方或者h(yuǎn)ack也可以很方便的獲取到所有的模塊文件并進(jìn)行使用,這樣就導(dǎo)致一些核心模塊中的核心函數(shù)被盜用,進(jìn)而損壞了軟件開(kāi)發(fā)商的利益。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)存在的問(wèn)題,本發(fā)明實(shí)施例提供了一種保護(hù)核心模塊的方法及客戶(hù)端,用于解決現(xiàn)有技術(shù)中在程序發(fā)布后,一些核心程序模塊中的核心函數(shù)容易被第三方或者黑客盜用,導(dǎo)致軟件開(kāi)發(fā)商的利益被損壞的技術(shù)問(wèn)題。
本發(fā)明提供一種保護(hù)模塊文件的方法,所述方法包括:
根據(jù)預(yù)設(shè)的文件名查找加密后的模塊文件;
讀取查找到的所述模塊文件;
接收密鑰信息,基于所述密鑰信息對(duì)所述模塊文件進(jìn)行解密,獲取所述模塊文件的明文信息;其中,所述加密后的模塊文件是以數(shù)據(jù)文件的形式進(jìn)行保存的。
上述方案中,所述讀取查找到的所述模塊文件,包括:
利用函數(shù)fopen(“xx”,“rb”)打開(kāi)所述模塊文件;
獲取所述模塊文件的占用內(nèi)存;
調(diào)用函數(shù)fread(buff,filesize,1,file)讀取所述模塊文件至系統(tǒng)內(nèi)存中,并將所述模塊文件存儲(chǔ)至緩存buff中;其中,所述xx為模塊文件名。
上述方案中,基于密鑰信息對(duì)所述模塊文件進(jìn)行解密之前,還包括:
利用解壓縮函數(shù)zlib.decompress(buff,filesize)對(duì)讀取到的所述模塊文件進(jìn)行解壓縮。
上述方案中,所述基于密鑰信息對(duì)所述模塊文件進(jìn)行解密,包括:
向服務(wù)器發(fā)送密鑰請(qǐng)求信息,使得所述服務(wù)器基于用戶(hù)注冊(cè)id返回所述密鑰信息;
據(jù)所述密鑰信息在所述模塊文件的密文信息中提取出附加信息;
將所述密鑰信息與所述附加信息進(jìn)行組合形成一組合密鑰;
利用所述組合密鑰將所述密文信息轉(zhuǎn)換成相應(yīng)的明文信息。
上述方案中,所述基于密鑰信息對(duì)所述模塊文件進(jìn)行解密,包括:
接收?qǐng)D像信息,從所述圖像信息中讀取至少一組顏色值,所述圖像信息為對(duì)所述模塊文件進(jìn)行加密的加密結(jié)果;
根據(jù)第二轉(zhuǎn)換規(guī)則將所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息;
將所述數(shù)字信息轉(zhuǎn)換為字符編碼;
將所述字符編碼轉(zhuǎn)換所述明文信息。
上述方案中,從所述圖像中讀取至少一組顏色值包括:
接收混淆數(shù)值,根據(jù)所述混淆數(shù)值確定的隨機(jī)生成的混淆色塊的數(shù)量;
基于混淆算法確定所述混淆色塊在所述圖像中的寫(xiě)入位置;
確定寫(xiě)入所述顏色值的第一基準(zhǔn)點(diǎn);
以所述第一基準(zhǔn)點(diǎn)為起始位置遍歷所述圖像,在遍歷過(guò)程中,基于所述混淆色塊的數(shù)量及在所述混淆色塊在所述圖像中的寫(xiě)入位置跳過(guò)所述混淆色塊,讀取所述至少一組顏色值。
上述方案中,所述根據(jù)第二轉(zhuǎn)換規(guī)則將相所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息,包括:
確定每種顏色對(duì)應(yīng)的最大階層,根據(jù)公式a=(b*c+g)*c+r確定所述數(shù)字信息的數(shù)值a;其中,所述每種顏色對(duì)應(yīng)的最大階層相同,所述r為紅色,所述g為綠色,所述b為藍(lán)色,所述c為所述每種顏色對(duì)應(yīng)的最大階層。
上述方案中,所述基于密鑰信息對(duì)所述模塊文件進(jìn)行解密,包括:
接收音頻信息,從所述音頻信息中讀取至少一種音頻碼,所述音頻信息為對(duì)所述模塊文件進(jìn)行加密的加密結(jié)果;
根據(jù)第三轉(zhuǎn)換規(guī)則將所述至少一組音頻碼轉(zhuǎn)換為所述明文信息。
上述方案中,所述從音頻信息中讀取至少一種音頻碼,包括:
讀取音頻數(shù)據(jù),獲取所述音頻的頻率隊(duì)列;
遍歷所述頻率隊(duì)列,獲取第一頻率及第二頻率;
將所述第一頻率轉(zhuǎn)換為第一音頻編碼,將所述第二頻率轉(zhuǎn)換為第二音頻編碼;
根據(jù)所述第一音頻編碼及所述第二音頻編碼確定相應(yīng)的音頻編碼;
將所述音頻編碼進(jìn)行組合獲取所述至少一組音頻碼。
本發(fā)明還提供一種客戶(hù)端,所述客戶(hù)端包括:
查找單元,用于根據(jù)預(yù)設(shè)的文件名查找加密后的模塊文件;
讀取單元,用于讀取查找到的所述模塊文件;
解密單元,用于接收密鑰信息,基于所述密鑰信息對(duì)所述模塊文件進(jìn)行解密,獲取所述模塊文件的明文信息;其中,所述加密后的模塊文件是以數(shù)據(jù)文件的形式進(jìn)行保存的。
本發(fā)明提供了一種保護(hù)模塊文件的方法及客戶(hù)端,所述方法包括:根據(jù)預(yù)設(shè)的文件名查找加密后的模塊文件;讀取查找到的所述模塊文件;接收密鑰信息,基于所述密鑰信息對(duì)所述模塊文件進(jìn)行解密,獲取所述模塊文件的明文信息;其中,所述加密后的模塊文件是以數(shù)據(jù)文件的形式進(jìn)行保存的;如此,將模塊文件偽裝成數(shù)據(jù)文件保存,進(jìn)一步提高了模塊文件的隱蔽性,增強(qiáng)對(duì)模塊文件的保護(hù)力度,使得模塊文件不能輕易被盜用;并且,利用加密算法對(duì)模塊文件加密后,只有合法的客戶(hù)端才能接收到密鑰信息,即使第三方或者黑客盜取到該模塊文件,也無(wú)法直接使用,進(jìn)而確保了軟件開(kāi)發(fā)商的利益。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例一提供的保護(hù)模塊文件的方法流程示意圖;
圖2為本發(fā)明實(shí)施例二提供的保護(hù)模塊文件的裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了解決核心程序模塊中的核心函數(shù)容易被第三方或者黑客盜用,導(dǎo)致軟件開(kāi)發(fā)商的利益被損壞的技術(shù)問(wèn)題,本發(fā)明提供了一種保護(hù)模塊文件的方法及客戶(hù)端,所述方法包括:根據(jù)預(yù)設(shè)的文件名查找加密后的模塊文件;讀取查找到的所述模塊文件;接收密鑰信息,基于所述密鑰信息對(duì)所述模塊文件進(jìn)行解密,獲取所述模塊文件的明文信息;其中,所述加密后的模塊文件是以數(shù)據(jù)文件的形式進(jìn)行保存的。
下面通過(guò)附圖及具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)說(shuō)明。
實(shí)施例一
本實(shí)施例提供一種保護(hù)模塊文件的方法,如圖1所示,所述方法包括:
s101,根據(jù)預(yù)設(shè)的文件名查找加密后的模塊文件。
本步驟中,為了提高模塊文件的隱蔽性,所述加密后的模塊文件是調(diào)用文件讀寫(xiě)庫(kù)函數(shù)將模塊文件的內(nèi)存數(shù)據(jù)保存至磁盤(pán)等存儲(chǔ)介質(zhì)中的,比如寫(xiě)入“xx.data”的文件夾中,因此在查找模塊文件時(shí),可以根據(jù)預(yù)設(shè)的文件名查找加密后的模塊文件。所述預(yù)設(shè)的文件名即為“xx.data”。
s102,讀取查找到的所述模塊文件。
本步驟中,當(dāng)根據(jù)預(yù)設(shè)的文件名查找到模塊文件之后,讀取所述模塊文件至系統(tǒng)內(nèi)存,具體地:
首先調(diào)用系統(tǒng)庫(kù)函數(shù)fopen(“xx”,“rb”)打開(kāi)所述模塊文件;其中,所述“xx”為模塊文件名,所述“rb”為讀取文件。
讀取到模塊文件之后,將文件指針移動(dòng)至所述模塊文件的尾部,獲取所述模塊文件的占用內(nèi)存,具體程序?qū)崿F(xiàn)如下:
fseek(file,0,seek_end);
uintfilesize=ftell(file);
當(dāng)獲取到所述模塊文件的占用內(nèi)存后,調(diào)用函數(shù)fread(buff,filesize,1,file)讀取所述模塊文件至系統(tǒng)內(nèi)存中,并將所述模塊文件存儲(chǔ)至緩存buff中。
當(dāng)讀取到模塊文件的內(nèi)容后,因加密時(shí)為了降低模塊文件的占用內(nèi)存,是將模塊文件壓縮了,因此,本步驟中還需利用解壓縮函數(shù)zlib.decompress(buff,filesize)對(duì)讀取到的所述模塊文件進(jìn)行解壓縮,以還原模塊文件的原始文件。
s103,接收密鑰信息,基于所述密鑰信息對(duì)所述模塊文件進(jìn)行解密,獲取所述模塊文件的明文信息。
本步驟中,當(dāng)客戶(hù)端對(duì)模塊文件解壓縮后,向服務(wù)器發(fā)送密鑰請(qǐng)求信息,所述服務(wù)器根據(jù)用戶(hù)注冊(cè)id判斷所述客戶(hù)端是否合法,若合法,則向所述客戶(hù)端發(fā)送密鑰信息,若不合法,則丟棄該條密鑰請(qǐng)求信息。
當(dāng)獲取到密鑰信息后,基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,獲取所述模塊文件的明文信息。
具體地,當(dāng)模塊文件為文字信息,且加密算法是tea加密算法時(shí),基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,包括:
利用解密算法tea.decrypt(buff,filesize,key)對(duì)所述模塊文件進(jìn)行解密;其中,所述key為接收到的密鑰信息;所述decrypt接口是tea算法的解密接口。
當(dāng)加密算法是aes加密算法時(shí),基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,包括:
利用解密算法aes.decrypt(buff,filesize,key)對(duì)所述模塊文件進(jìn)行解密;其中,所述key為接收到的密鑰信息;此時(shí)所述decrypt接口是aes算法的解密接口。
當(dāng)加密算法是rsa加密算法時(shí),基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,包括:
利用解密算法rsa.decrypt(buff,filesize,key)對(duì)所述模塊文件進(jìn)行解密;其中,所述key為接收到的密鑰信息;此時(shí)所述decrypt接口是rsa算法的解密接口。
這里,當(dāng)加密算法為預(yù)設(shè)的其他加密算法時(shí),基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,還包括:
當(dāng)接收到密鑰信息后,判斷出密鑰的長(zhǎng)度信息,并根據(jù)所述密鑰在所述密文信息中提取出附加信息,具體包括:基于所述密鑰確定出所述附加信息在所述密文信息中的插入位置,根據(jù)密鑰的長(zhǎng)度信息確定附加信息的長(zhǎng)度信息;在所述密文信息的所述插入位置基于所述長(zhǎng)度信息提取出所述附加信息。其中,所述附加信息的長(zhǎng)度可以為密鑰長(zhǎng)度的2~3倍,且附加信息的字符可以包括:數(shù)字或字母。
基于所述密鑰確定出所述附加信息在所述密文信息中的插入位置,包括:確定所述密鑰的參照位;獲取所述密鑰參照位的字符;按照預(yù)設(shè)的第一轉(zhuǎn)換規(guī)則將所述字符轉(zhuǎn)換為一數(shù)值;基于所述數(shù)值確定出所述插入位置。
其中,預(yù)設(shè)的第一轉(zhuǎn)換規(guī)則為將所述可以包括多種:比如將字符與十進(jìn)制數(shù)值對(duì)應(yīng)轉(zhuǎn)換,將字符與ascii碼值進(jìn)行對(duì)應(yīng)轉(zhuǎn)換。
當(dāng)將字符與ascii碼值進(jìn)行對(duì)應(yīng)轉(zhuǎn)換時(shí),接收到密鑰后,然后獲取密鑰參照位的字符,確定所述字符對(duì)應(yīng)的十進(jìn)制ascii碼值,以此值作為參照值在密文中尋找附加信息字符所在的位置。尋找到該位置后,將附加信息字符從密文信息中提取出來(lái)。這里,所述密鑰的參照位可以為密鑰中的任一位,比如首位或末位;當(dāng)以密鑰的末位設(shè)置為密鑰的參照位,比如密鑰為12345,那么參照位的字符就是“5”,再獲取到“5”對(duì)應(yīng)的ascii碼為“53”,然后將附加信息從密文信息中的第53個(gè)字符之后的位置提取出即可。
將所述附加信息從密文信息中提取出之后,并判斷該密文字符末尾是否有相應(yīng)的文件類(lèi)型,如果有,則新建一個(gè)該類(lèi)型的文件以方便后期解密寫(xiě)入。如果沒(méi)有,則默認(rèn)新建一個(gè)文檔文件來(lái)記錄解密數(shù)據(jù)。
然后,在得到密鑰字符串和附加信息的字符串后,將兩個(gè)字符串進(jìn)行拼接,形成一組合密鑰,并使用該組合密鑰將密文信息轉(zhuǎn)換為明文信息,這樣就可以將加密的模塊文件轉(zhuǎn)換為明文信息,然后將其顯示在客戶(hù)端的屏幕上。
這里,當(dāng)加密算法為預(yù)設(shè)的其他加密算法,且加密后的模塊文件為圖像信息時(shí),基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,還包括:
從圖像中讀取至少一組顏色值,所述圖像為對(duì)明文信息進(jìn)行加密的加密結(jié)果;根據(jù)第二轉(zhuǎn)換規(guī)則將所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息;將所述數(shù)字信息轉(zhuǎn)換為字符編碼;將所述字符編碼轉(zhuǎn)換所述明文信息。
根據(jù)第二轉(zhuǎn)換規(guī)則將相所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息,包括:
確定每種顏色對(duì)應(yīng)的最大階層,根據(jù)公式a=(b*c+g)*c+r確定所述數(shù)字信息的數(shù)值a;其中,所述每種顏色對(duì)應(yīng)的最大階層相同,所述r為紅色,所述g為綠色,所述b為藍(lán)色,所述c為所述每種顏色對(duì)應(yīng)的最大階層。
當(dāng)所述圖像中混淆有混淆色塊時(shí),從所述圖像中讀取至少一組顏色值包括:接收混淆數(shù)值,根據(jù)所述混淆數(shù)值確定的隨機(jī)生成的混淆色塊的數(shù)量;基于混淆算法確定所述混淆色塊在所述圖像中的寫(xiě)入位置;確定寫(xiě)入所述顏色值的第一基準(zhǔn)點(diǎn);以所述第一基準(zhǔn)點(diǎn)為起始位置遍歷所述圖像,在遍歷過(guò)程中,基于所述混淆色塊的數(shù)量及在所述混淆色塊在所述圖像中的寫(xiě)入位置跳過(guò)所述混淆色塊,讀取所述至少一組顏色值。
這里,當(dāng)加密算法為預(yù)設(shè)的其他加密算法,且加密后的模塊文件為音頻信息時(shí),基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,還包括:
接收音頻,從所述音頻中讀取至少一種音頻碼;根據(jù)第三轉(zhuǎn)換規(guī)則將所述至少一組音頻碼轉(zhuǎn)換為明文信息。
所述從音頻中讀取至少一種音頻碼,包括:讀取音頻數(shù)據(jù),獲取所述音頻的頻率隊(duì)列;遍歷所述頻率隊(duì)列,獲取第一頻率及第二頻率;將所述第一頻率轉(zhuǎn)換為第一音頻編碼,將所述第二頻率轉(zhuǎn)換為第二音頻編碼;根據(jù)所述第一音頻編碼及所述第二音頻編碼確定相應(yīng)的音頻編碼;將所述音頻編碼進(jìn)行組合獲取所述至少一組音頻碼。
所述讀取音頻數(shù)據(jù),獲取所述音頻的頻率隊(duì)列,包括:建立一音頻信息對(duì)象,在所述音頻信息對(duì)象中設(shè)置一采樣頻率;基于所述采樣頻率采集所述音頻數(shù)據(jù),并將所述音頻數(shù)據(jù)存儲(chǔ)至一數(shù)組中;遍歷所述數(shù)組,將所述數(shù)組中的每一項(xiàng)數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的頻率,形成頻率隊(duì)列。
所述根據(jù)第三轉(zhuǎn)換規(guī)則將所述至少一組音頻碼轉(zhuǎn)換為明文信息包括;根據(jù)預(yù)設(shè)的提取規(guī)則,將所述音頻碼拆分為至少一組音頻編碼;確定每個(gè)數(shù)字對(duì)應(yīng)的音頻編碼;基于所述每個(gè)數(shù)字對(duì)應(yīng)的音頻編碼及每組音頻編碼,將所述音頻編碼轉(zhuǎn)換為至少一組數(shù)字信息;將所述至少一組數(shù)字信息轉(zhuǎn)換為字符編碼;將所述字符編碼轉(zhuǎn)換為所述明文信息。
這樣就完成了解密過(guò)程,獲取到模塊數(shù)據(jù)。
對(duì)所述模塊文件進(jìn)行解密后,將模塊文件保存至客戶(hù)端的臨時(shí)目錄中進(jìn)行加載,主程序就可以正常加載模塊文件來(lái)使用該模塊的所有功能。具體實(shí)現(xiàn)如下:
首先打開(kāi)一個(gè)文件名為“xx.dll”的文件,然后調(diào)用函數(shù)fwrite來(lái)模塊的數(shù)據(jù)寫(xiě)入到“xx.dll”文件中,具體實(shí)現(xiàn)如下:
file*file=fopen(“xx.dll”,“wb”);
fwrite(buff,filesize,1,file);
fclose(file);
保存好之后,可以利用系統(tǒng)api函數(shù)loadlibrary來(lái)加載模塊文件,具體實(shí)現(xiàn)如下:
hmoduleloadlibrary(lpctstrlpfilename);
這里,filename應(yīng)該是xxx+xx.dll,這樣就正常使用該模塊的功能了。
實(shí)施例二
相應(yīng)于實(shí)施例一,本實(shí)施例提供一種客戶(hù)端,如圖2所示,所述客戶(hù)端包括:查找單元21、讀取單元22、解密單元23及解壓縮單元24;其中,
為了提高模塊文件的隱蔽性,所述加密后的模塊文件是調(diào)用文件讀寫(xiě)庫(kù)函數(shù)將模塊文件的內(nèi)存數(shù)據(jù)保存至磁盤(pán)等存儲(chǔ)介質(zhì)中的,比如寫(xiě)入“xx.data”的文件夾中,因此查找單元21在查找模塊文件時(shí),可以根據(jù)預(yù)設(shè)的文件名查找加密后的模塊文件。所述預(yù)設(shè)的文件名即為“xx.data”。
當(dāng)根據(jù)預(yù)設(shè)的文件名查找到模塊文件之后,讀取單元22讀取所述模塊文件至系統(tǒng)內(nèi)存,具體地:
首先調(diào)用系統(tǒng)庫(kù)函數(shù)fopen(“xx”,“rb”)打開(kāi)所述模塊文件;其中,所述“xx”為模塊文件名,所述“rb”為讀取文件。
讀取到模塊文件之后,將文件指針移動(dòng)至所述模塊文件的尾部,獲取所述模塊文件的占用內(nèi)存,具體程序?qū)崿F(xiàn)如下:
fseek(file,0,seek_end);
uintfilesize=ftell(file);
當(dāng)獲取到所述模塊文件的占用內(nèi)存后,調(diào)用函數(shù)fread(buff,filesize,1,file)讀取所述模塊文件至系統(tǒng)內(nèi)存中,并將所述模塊文件存儲(chǔ)至緩存buff中。
當(dāng)所述讀取單元22讀取到模塊文件的內(nèi)容后,因加密時(shí)為了降低模塊文件的占用內(nèi)存,是將模塊文件壓縮了,因此,解壓縮單元24利用解壓縮函數(shù)zlib.decompress(buff,filesize)對(duì)讀取到的所述模塊文件進(jìn)行解壓縮,以還原模塊文件的原始文件。
當(dāng)獲取到模塊文件的原始文件后,解密單元23用于接收密鑰信息,基于所述密鑰信息對(duì)所述模塊文件進(jìn)行解密,獲取所述模塊文件的明文信息。
具體地,當(dāng)解壓縮單元24對(duì)模塊文件解壓縮后,所述解密單元23向服務(wù)器發(fā)送密鑰請(qǐng)求信息,所述服務(wù)器根據(jù)用戶(hù)注冊(cè)id判斷所述客戶(hù)端是否合法,若合法,則向所述解密單元23發(fā)送密鑰信息,若不合法,則丟棄該條密鑰請(qǐng)求信息。
當(dāng)解密單元23獲取到密鑰信息后,基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,獲取所述模塊文件的明文信息。
具體地,當(dāng)模塊文件為文字信息,且加密算法是tea加密算法時(shí),解密單元23基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,包括:
利用解密算法tea.decrypt(buff,filesize,key)對(duì)所述模塊文件進(jìn)行解密;其中,所述key為接收到的密鑰信息;所述decrypt接口是tea算法的解密接口。
當(dāng)加密算法是aes加密算法時(shí),基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,包括:
利用解密算法aes.decrypt(buff,filesize,key)對(duì)所述模塊文件進(jìn)行解密;其中,所述key為接收到的密鑰信息;此時(shí)所述decrypt接口是aes算法的解密接口。
當(dāng)加密算法是rsa加密算法時(shí),基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,包括:
利用解密算法rsa.decrypt(buff,filesize,key)對(duì)所述模塊文件進(jìn)行解密;其中,所述key為接收到的密鑰信息;此時(shí)所述decrypt接口是rsa算法的解密接口。
這里,當(dāng)加密算法為預(yù)設(shè)的其他加密算法時(shí),解密單元23基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,還包括:
當(dāng)接收到密鑰信息后,判斷出密鑰的長(zhǎng)度信息,并根據(jù)所述密鑰在所述密文信息中提取出附加信息,具體包括:基于所述密鑰確定出所述附加信息在所述密文信息中的插入位置,根據(jù)密鑰的長(zhǎng)度信息確定附加信息的長(zhǎng)度信息;在所述密文信息的所述插入位置基于所述長(zhǎng)度信息提取出所述附加信息。其中,所述附加信息的長(zhǎng)度可以為密鑰長(zhǎng)度的2~3倍,且附加信息的字符可以包括:數(shù)字或字母。
基于所述密鑰確定出所述附加信息在所述密文信息中的插入位置,包括:確定所述密鑰的參照位;獲取所述密鑰參照位的字符;按照預(yù)設(shè)的第一轉(zhuǎn)換規(guī)則將所述字符轉(zhuǎn)換為一數(shù)值;基于所述數(shù)值確定出所述插入位置。
其中,預(yù)設(shè)的第一轉(zhuǎn)換規(guī)則為將所述可以包括多種:比如將字符與十進(jìn)制數(shù)值對(duì)應(yīng)轉(zhuǎn)換,將字符與ascii碼值進(jìn)行對(duì)應(yīng)轉(zhuǎn)換。
當(dāng)將字符與ascii碼值進(jìn)行對(duì)應(yīng)轉(zhuǎn)換時(shí),接收到密鑰后,然后獲取密鑰參照位的字符,確定所述字符對(duì)應(yīng)的十進(jìn)制ascii碼值,以此值作為參照值在密文中尋找附加信息字符所在的位置。尋找到該位置后,將附加信息字符從密文信息中提取出來(lái)。這里,所述密鑰的參照位可以為密鑰中的任一位,比如首位或末位;當(dāng)以密鑰的末位設(shè)置為密鑰的參照位,比如密鑰為12345,那么參照位的字符就是“5”,再獲取到“5”對(duì)應(yīng)的ascii碼為“53”,然后將附加信息從密文信息中的第53個(gè)字符之后的位置提取出即可。
將所述附加信息從密文信息中提取出之后,并判斷該密文字符末尾是否有相應(yīng)的文件類(lèi)型,如果有,則新建一個(gè)該類(lèi)型的文件以方便后期解密寫(xiě)入。如果沒(méi)有,則默認(rèn)新建一個(gè)文檔文件來(lái)記錄解密數(shù)據(jù)。
然后,在得到密鑰字符串和附加信息的字符串后,將兩個(gè)字符串進(jìn)行拼接,形成一組合密鑰,并使用該組合密鑰將密文信息轉(zhuǎn)換為明文信息,這樣就可以將加密的模塊文件轉(zhuǎn)換為明文信息,然后將其顯示在客戶(hù)端的屏幕上。
這里,當(dāng)加密算法為預(yù)設(shè)的其他加密算法,且加密后的模塊文件為圖像信息時(shí),解密單元23基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,還包括:
從圖像中讀取至少一組顏色值,所述圖像為對(duì)明文信息進(jìn)行加密的加密結(jié)果;根據(jù)第二轉(zhuǎn)換規(guī)則將所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息;將所述數(shù)字信息轉(zhuǎn)換為字符編碼;將所述字符編碼轉(zhuǎn)換所述明文信息。
根據(jù)第二轉(zhuǎn)換規(guī)則將相所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息,包括:
確定每種顏色對(duì)應(yīng)的最大階層,根據(jù)公式a=(b*c+g)*c+r確定所述數(shù)字信息的數(shù)值a;其中,所述每種顏色對(duì)應(yīng)的最大階層相同,所述r為紅色,所述g為綠色,所述b為藍(lán)色,所述c為所述每種顏色對(duì)應(yīng)的最大階層。
當(dāng)所述圖像中混淆有混淆色塊時(shí),從所述圖像中讀取至少一組顏色值包括:接收混淆數(shù)值,根據(jù)所述混淆數(shù)值確定的隨機(jī)生成的混淆色塊的數(shù)量;基于混淆算法確定所述混淆色塊在所述圖像中的寫(xiě)入位置;確定寫(xiě)入所述顏色值的第一基準(zhǔn)點(diǎn);以所述第一基準(zhǔn)點(diǎn)為起始位置遍歷所述圖像,在遍歷過(guò)程中,基于所述混淆色塊的數(shù)量及在所述混淆色塊在所述圖像中的寫(xiě)入位置跳過(guò)所述混淆色塊,讀取所述至少一組顏色值。
這里,當(dāng)加密算法為預(yù)設(shè)的其他加密算法,且加密后的模塊文件為音頻信息時(shí),解密單元23基于所述密鑰信息利用解密算法對(duì)所述模塊文件進(jìn)行解密,還包括:
接收音頻,從所述音頻中讀取至少一種音頻碼;根據(jù)第三轉(zhuǎn)換規(guī)則將所述至少一組音頻碼轉(zhuǎn)換為明文信息。
所述從音頻中讀取至少一種音頻碼,包括:讀取音頻數(shù)據(jù),獲取所述音頻的頻率隊(duì)列;遍歷所述頻率隊(duì)列,獲取第一頻率及第二頻率;將所述第一頻率轉(zhuǎn)換為第一音頻編碼,將所述第二頻率轉(zhuǎn)換為第二音頻編碼;根據(jù)所述第一音頻編碼及所述第二音頻編碼確定相應(yīng)的音頻編碼;將所述音頻編碼進(jìn)行組合獲取所述至少一組音頻碼。
所述讀取音頻數(shù)據(jù),獲取所述音頻的頻率隊(duì)列,包括:建立一音頻信息對(duì)象,在所述音頻信息對(duì)象中設(shè)置一采樣頻率;基于所述采樣頻率采集所述音頻數(shù)據(jù),并將所述音頻數(shù)據(jù)存儲(chǔ)至一數(shù)組中;遍歷所述數(shù)組,將所述數(shù)組中的每一項(xiàng)數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的頻率,形成頻率隊(duì)列。
所述根據(jù)第三轉(zhuǎn)換規(guī)則將所述至少一組音頻碼轉(zhuǎn)換為明文信息包括;根據(jù)預(yù)設(shè)的提取規(guī)則,將所述音頻碼拆分為至少一組音頻編碼;確定每個(gè)數(shù)字對(duì)應(yīng)的音頻編碼;基于所述每個(gè)數(shù)字對(duì)應(yīng)的音頻編碼及每組音頻編碼,將所述音頻編碼轉(zhuǎn)換為至少一組數(shù)字信息;將所述至少一組數(shù)字信息轉(zhuǎn)換為字符編碼;將所述字符編碼轉(zhuǎn)換為所述明文信息。
這樣就完成了解密過(guò)程,獲取到模塊數(shù)據(jù)。
對(duì)所述模塊文件進(jìn)行解密后,將模塊文件保存至客戶(hù)端的臨時(shí)目錄中進(jìn)行加載,主程序就可以正常加載模塊文件來(lái)使用該模塊的所有功能。具體實(shí)現(xiàn)如下:
首先先打開(kāi)一個(gè)文件名為“xx.dll”的文件,然后調(diào)用函數(shù)fwrite來(lái)模塊的數(shù)據(jù)寫(xiě)入到“xx.dll”文件中,具體實(shí)現(xiàn)如下:
file*file=fopen(“xx.dll”,“wb”);
fwrite(buff,filesize,1,file);
fclose(file);
保存好之后,可以利用系統(tǒng)api函數(shù)loadlibrary來(lái)加載模塊文件,具體實(shí)現(xiàn)如下:
hmoduleloadlibrary(lpctstrlpfilename);
這里,filename應(yīng)該是xxx+xx.dll,這樣就正常使用該模塊的功能了。
本發(fā)明實(shí)施例提供的保護(hù)模塊文件的方法及客戶(hù)端能帶來(lái)的有益效果至少是:
本發(fā)明實(shí)施例提供一種保護(hù)模塊文件的方法及客戶(hù)端,所述方法包括:根據(jù)預(yù)設(shè)的文件名查找加密后的模塊文件;讀取查找到的所述模塊文件;接收密鑰信息,基于所述密鑰信息對(duì)所述模塊文件進(jìn)行解密,獲取所述模塊文件的明文信息;其中,所述加密后的模塊文件是以數(shù)據(jù)文件的形式進(jìn)行保存的;如此,將模塊文件偽裝成數(shù)據(jù)文件保存,進(jìn)一步提高了模塊文件的隱蔽性,增強(qiáng)對(duì)模塊文件的保護(hù)力度,使得模塊文件不能輕易被盜用;并且,利用加密算法對(duì)模塊文件加密后,只有合法的客戶(hù)端才能接收到密鑰信息,即使第三方或者黑客盜取到該模塊文件,由于沒(méi)有破解方法也無(wú)法直接使用,進(jìn)而確保了軟件開(kāi)發(fā)商的利益。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。