指令碼加密

透過本章節,您可以了解如何加密在 FIRERPA 內建 Python 環境中執行的模組或指令碼。本章節不涉及在 PC 端對指令碼進行加密,而是介紹對 ~/modules/task~/modules/extension 等目錄中的模組,以及使用內建 Python 命令執行的指令碼進行加密。我們提供了相關工具幫助您快速完成加密操作。

指令碼加密採用 Cython 將 Python 程式碼轉換為 C 語言,再編譯成 .so 檔案的方法,對效能影響很小。但我們建議您只加密核心邏輯,而非所有指令碼檔案;同時,請勿加密第三方函式庫的檔案,因為這些操作是徒勞的。請始終遵循「只加密自己的邏輯」這一原則。

構建工具映像檔

本工具重度依賴 Docker,因此在繼續之前請確保已安裝 Docker。現在請複製儲存庫 https://github.com/firerpa/compiler,並依照文件或以下命令構建映像檔:

docker build -t compiler .

加密指令碼程式碼

使用以下命令將原始碼映射到容器內並編譯。支援的架構(arch)包括 armarm64x86x86_64,分別對應 FIRERPA 伺服器端的不同架構。不同架構編譯出的檔案互不相容。

docker run -it --rm -v /source/dir:/data compiler:latest compile.sh --arch arm64 /data/my_important_script.py

正常情況下,執行命令後,您將在指令碼所在的目錄獲得一個名為 my_important_script.cpython-39.so 的檔案。請勿重新命名此檔案;如需使用其他名稱,請直接修改原始指令碼的檔案名稱。在發布指令碼時,您可以刪除對應的 .py 來源檔案,並將 .so 檔案放入相應目錄即可。

注意

如果您的程式碼不是 FIRERPA 模組(例如 extension 或 task),且僅由一個 Python 檔案構成,Python 解譯器無法直接執行 .so 檔案。此時您需要撰寫一個進入點 .py 指令碼,用來匯入並啟動加密後的 .so 檔案。如果程式碼本身是一個模組,則直接將 .so 檔案放入對應目錄,然後重新啟動服務即可。