2020年7月13日 星期一

如何加密自動化檔案

當我們需要分享開發完成的自動化程式給其他人使用時,為了保護開發者的智慧財產權,我們會想要將程式加密起來。在IronPython當中,我們可以透過編譯dll的方式,將原本為文字格式的Python加密。接下來以一個簡單的範例介紹如何執行程式加密。

首先準備兩個Python檔案:main.py及mymodule.py,兩個檔案放在d:/demo目錄底下。main.py的程式碼:

import os
os.chdir(os.path.dirname(os.path.realpath(__file__)))

import mymodule

x = mymodule.myadd(1,3)
AddWarningMessage(str(x))

主程式只包含簡單功能的代碼,像是切換工作路徑,匯入模組,呼叫模組的函式完成計算,輸出結果到訊息視窗等等。至於重要的資料及演算法代碼則是放在mymodule.py,本範例只有一個函式:

def myadd(x, y):
    return x+y

在AEDT執行main.py,訊息視窗會顯示答案,如圖一:

(圖一) 程式正確執行


功能測試無誤之後,接下來編寫一個批次檔compile.bat來針對mymodule.py執行dll編譯的工作:

PATH=%PATH%;C:\Program Files\AnsysEM\AnsysEM20.2\Win64\common\IronPython

ipy64 "C:/Program Files/AnsysEM/AnsysEM20.2/Win64/common/IronPython/Tools/Scripts/pyc.py" "D:/demo/mymodule.py"
pause

在windows命令列視窗執行compile.bat,如果編譯成功會出現如圖二的訊息,此時目錄下會出現mymodule.dll檔案。

(圖二) 成功編譯.dll訊息

最後在主程式碼當中加上clr.AddReferenceToFileAndPath("mymodule.dll")指令來鏈結.dll檔,程式碼如下。

import os
os.chdir(os.path.dirname(os.path.realpath(__file__)))

import clr
clr.AddReferenceToFileAndPath("mymodule.dll")

import mymodule

x = mymodule.myadd(1,3)
AddWarningMessage(str(x))

從d:/demo目錄底下移除mymodule.py檔之後,執行main.py。如果可以正常執行,即代表鏈結無誤。接下來只要提供main.py以及mymodule.dll給需要的人就可以了。

沒有留言:

張貼留言