前言

在完成机器学习平台项目后,迫切的需要一个加密方案来保护我们的代码,不被别人看到。我们采用的方案是使用Cython。

思路

虽说 Cython 的主要目的是带来性能的提升,但是基于它的原理:将 .py/.pyx 编译为 .c 文件,再将 .c 文件编译为 .so(Unix) 或 .pyd(Windows),其带来的另一个好处就是难以破解。

方法

# 有两个踩坑的地方,第一是加解密需要libpython3.6m.so.1.0动态库,
# 所以在安装Python的时候需要把动态链接库编译出来。
# 安装Python3的时候配置编译
./configure --prefix=/usr/local/python3 --enable-optimizations --enable-shared CFLAGS=-fPIC
make && make install
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
# 把编译好的文件放到lib下
cp libpython3.6m.so.1.0 /usr/local/lib64/
cp libpython3.6m.so.1.0 /usr/lib/
cp libpython3.6m.so.1.0 /usr/lib64/
# 第二是你要加密的xxxx.py第一行需要添加注释
# cython: language_level=3
# 用来指定Python的版本

# 安装相关库
pip3 install Cython -i https://pypi.doubanio.com/simple/
yum install -y gcc python-devel
# 创建setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(
    ext_modules = cythonize("xxxx.py")
)
# 运行
python3 setup.py build_ext --inplace
# build_ext 是指明python生成C/C++的扩展模块。
# --inplace 是将编译后的扩展模块直接放在与xxxx.py同级的目录中。

Centos环境下会在当前目录下生成so文件,其他文件都可以删除。
此时的so文件即是加密后的文件。和正常的py文件一样使用!

Last modification:August 24th, 2020 at 03:12 pm