Шифрование скриптов

В этой главе вы узнаете, как шифровать модули или скрипты, выполняемые во встроенной среде Python FIRERPA. В этой главе не рассматривается шифрование скриптов на ПК; вместо этого описывается шифрование модулей в каталогах ~/modules/task, ~/modules/extension и т. д., а также скриптов, выполняемых с помощью встроенной команды Python. Мы предоставляем соответствующие инструменты, которые помогут быстро выполнить шифрование.

Шифрование скриптов использует Cython для преобразования кода Python в C, а затем компиляции в файлы .so, что оказывает минимальное влияние на производительность. Однако мы рекомендуем шифровать только основную логику, а не все файлы скриптов. Также не шифруйте файлы сторонних библиотек, поскольку это бесполезно. Всегда следуйте принципу «шифровать только собственную логику».

Сборка образа инструмента

Этот инструмент сильно зависит от Docker, поэтому перед продолжением убедитесь, что Docker установлен. Теперь клонируйте репозиторий https://github.com/firerpa/compiler и соберите образ согласно документации или с помощью следующей команды:

docker build -t compiler .

Шифрование кода скрипта

Используйте следующую команду, чтобы смонтировать исходный код в контейнер и скомпилировать его. Поддерживаемые архитектуры (arch): arm, arm64, x86, x86_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 в соответствующий каталог и перезапустите службу.