混淆處理的具體過程如下:
[0085]S301、獲取所述函數列表和類的列表中的所有調用關系對應的調用函數;
[0086]具體的,獲取所有函數列表和類的列表中函數與函數之間,以及類與類之間的調用關系對應的調用函數,該調用函數中包括調用非加密Python程序模塊的調用函數(即對外調用函數)以及非加密Python程序模塊調用加密Python程序模塊的調用函數(即對內調用函數)。
[0087]S302、根據所述調用關系對應的調用函數,確定所述待加密的Python程序模塊中的待混淆函數信息;其中,所述待混淆函數信息包括所述待混淆函數的以下信息中的一種或多種:名稱和待混淆變量;
[0088]具體的,根據上述調用關系對應的調用函數確定待混淆函數的名稱和待混淆函數的變量;實際上,就是確定對內調用部分(即待加密的Python程序模塊)的函數和對應的函數變量需要做混淆處理,而對外調用部分(即非加密的Python程序模塊)不需要進行混淆處理。
[0089]S303、利用預設混淆函數信息對所述待混淆函數信息進行重命名;其中,所述預設混淆函數信息包括以下信息中的一種或多種:混淆函數名稱和混淆變量名稱;且所述混淆函數名稱和所述混淆變量名稱均與Python關鍵字名稱不同。
[0090]其中,上述預設混淆函數信息(即混淆函數名稱和混淆變量名稱)是隨機生成的,利用該隨機生成的預設混淆函數信息對上述待加密的Python程序模塊中的函數名稱和對應的函數變量名稱進行重命名。
[0091]由于待加密的Python程序模塊中的函數名稱和對應的函數變量名稱均能夠表明該函數和變量的作用,很容易被盜用人理解和使用,本發(fā)明實施例中,通過對上述待加密的Python程序模塊中的函數名稱和對應的函數變量名稱進行混淆處理,進一步保證了待加密的Py thon程序模塊的安全性。
[0092]在步驟102中已經將待加密的Python程序模塊的Python代碼轉換為Jython代碼,而Jython代碼是可以被解密處理的,基于此,參考圖4,本發(fā)明實施例中對Jython代碼進行加密處理的過程具體包括如下步驟:
[0093]S401、根據用戶發(fā)送的執(zhí)行命令,將所述Jython代碼封裝成jar包函數。
[0094]本發(fā)明實施例中,Jython代碼可以進行加密處理,首先將Jython代碼封裝成jar包函數,而對應的j ar包函數可以被加密。
[0095]S402、對所述jar包函數進行加密,生成所述jar包函數對應的解密密鑰。
[0096I 具體的,根據預設加密方法對jar包函數進行加密,生成jar包函數對應的解密密鑰;其中,上述預設加密方法可以為二進制加密方式,可以為對稱加密算法,也可以為非對稱加密算法。
[0097]另外,本實施例中的整個方法是在安裝有Java運行環(huán)境和Jpype工具的運行環(huán)境中實現的,為了配合上述Jpype工具中的加載器調用加密文件,本發(fā)明實施例還需要對聯系待加密的Py thon程序模塊和非加密的Py thon程序模塊的函數(或者稱為Py thon代碼)進行配置,使其能夠實現使非加密的Python程序模塊可以調用待加密的Py thon程序模塊中的函數,參考圖5,具體配置過程如下:
[0098]S501、掃描所有函數列表和類的列表,獲取所述函數列表和類的列表中的所有調用關系對應的所述調用函數;其中,調用關系涉及的對象包括:函數和函數以及類和類;
[0099]首先,獲取所有函數列表和類的列表中函數與函數之間,以及類與類之間的調用關系對應的調用函數,該調用函數中包括調用非加密Python程序模塊的調用函數以及非加密Py thon程序模塊調用加密Py thon程序模塊的調用函數。
[0100]S502、在所述調用函數中查詢非加密Python程序模塊調用待加密的Python程序的對內調用函數;其中,所述非加密Python程序模塊包括非加密的類和非加密函數;
[0101]其中,在上述所有的調用函數中,獲取非加密Python程序模塊調用加密Python程序模塊的對內調用函數,對這些對內調用函數進行轉換處理,以使得處理后的對內調用函數與配置后的Jpype工具相配合。
[0102]S503、將查詢的所述對內調用函數轉換為通過Jpype工具調用jar包函數的形式。
[0103]本步驟中,將非加密Python程序模塊調用加密Python程序模塊的對內調用函數轉換為Jpype工具調用jar包函數的形式,以配合配置后的Jpype工具調用加密后的jar包函數。
[0104]本發(fā)明提供的一種Python程序模塊的安全調用方法,其應用到Python編寫的應用程序中,具有如下有益效果,具體表現在:I)運行環(huán)境變化少,只需要多安裝Java的運行環(huán)境和Python第三方擴展Jpype; 2)自動化程度高,只要定義需要暴露的接口和函數,剩下的均可自動化完成。3)跨平臺使用,只要Python和Java可以運行的平臺上均可以使用此方案保護Py thon源代碼。
[0105]本發(fā)明實施例還提供了一種Python程序模塊的安全調用裝置,所述裝置用于執(zhí)行上述Python程序模塊的安全調用方法,參考圖6,所述裝置包括:
[0106]第一獲取模塊11,用于獲取待加密的Python程序模塊;其中,所述Python程序模塊運行在安裝有Java運行環(huán)境和Jpype工具的運行環(huán)境中,所述Jpype工具包括加載器;
[0107]第一轉換模塊12,用于將所述待加密的Python程序模塊的Python代碼轉換為Jython 代碼;
[0108]加密模塊13,用于對所述Jython代碼進行加密處理,生成加密文件對應的解密密鑰;
[0109]配置模塊14,用于根據所述解密密鑰對所述Jpype工具的加載器進行配置,利用配置后的加載器調用所述加密文件,用以實現對Python程序模塊的安全調用。
[0110]如上所述,待加密的Python程序模塊的組成部分是編譯好的Python代碼,而實際上整個Python程序模塊只有一部分代碼是有價值的,需要對該有價值的部分進行加密(SP對內調用的部分),基于此,參考圖7,上述第一獲取模塊11包括:
[0111]獲取子模塊111,用于獲取配置文件中的函數列表和類的列表;
[0112]分析子模塊112,用于對所述函數列表和類的列表進行分析,確定待加密的類和待加密函數以及非加密的類和非加密函數;
[0113]設置子模塊113,用于將所述待加密的類和待加密函數作為待加密的Python程序模塊。
[0114]為了進一步保證Python程序模塊中的待加密的Python程序模塊的安全性,本發(fā)明實施例中優(yōu)選對待加密的Python程序模塊進行混淆處理,并且,在混淆處理時避開聯系非加密部分和待加密部分的函數和Py thon關鍵字,具體的,參考圖8,上述裝置還包括:
[0115]第二獲取模塊15,用于獲取所述函數列表和類的列表中的所有調用關系對應的調用函數;其中,所述調用關系涉及的對象包括:函數和函數以及類和類;
[0116]確定模塊16,用于根據所述調用關系對應的調用函數,確定所述待加密的Python程序模塊中的待混淆函數信息;其中,所述待混淆函數信息包括所述待混淆函數的以下信息中的一種或多種:名稱和待混淆變量;
[0117]混淆模塊17,用于利用預設混淆函數信息對所述待混淆函數信息進行重命名;其中,所述預設混淆函數信息包括以下信息中的一種或多種:混淆函數名稱和混淆變量名稱;且所述混淆函數名稱和所述混淆變量名稱均與Python關鍵字名稱不同。
[0118]上述加密模塊已經將待加密的Python程序模塊的Python代碼轉換為Jython代碼,而Jython代碼是可以被解密處理的,故本發(fā)明實施例提供的上述裝置,參考圖9,加密模塊13包括:
[0119]封裝子模塊131,用于根據用戶發(fā)送的執(zhí)行命令,將所述Jython代碼封裝成jar包函數;
[0120]加密子模塊132,用于對所述jar包函數進行加密,生成所述jar包函數對應的解密密鑰。
[0121]另外,本實施例中的整個方法是在安裝有Java運行環(huán)境和Jpype工具的運行環(huán)境中實現的,為了配合上述Jpype工具中的加載器調用加密文件,本發(fā)明實施例還需要對聯系待加密的Py thon程序模塊和非加密的Py thon程序模塊的函數(或者稱為Py thon代碼)進行配置,使其能夠實現使非加密的Python程序模塊可以調用待加密的Py thon程序模塊中的函數,具體的,參考圖10,上述裝置還包括:
[0122]掃描模塊18,用于掃描所有函數列表和類的列表,獲取所述函數列表和類的列表中的所有調用關系對應的所述調用函數;其中,所述調用關系涉及的對象包括:函數和函數以及類和類;
[0123]查詢模塊19,用于在所述調用函數中查詢非加密Python程序模塊調用待加密的Python程序的對內調用函數;其中,所述非加密Python程序模塊包括非加密的類和非加密函數;
[0124]第二轉換模塊2