python代码保护需求
python不像 C 或者 java 可以编译后生成机器码部署。很多时候需要将 python 代码部署到其他端上交付给用户,python是易读的语言,这时候如果用户直接读取后很容易在理解的基础上进行改动或复制,无法保护自己的知识成果。
1.如果直接用pyinstaller/py2exe等把项目打包,也很容易被解析出pyc文件,而 .pyc 文件很容易被python-uncompyle6 等软件反编译破解。
2.用代码混淆的方式加秘也是一种方法:不过只能对单个文件混淆,无法做到多个互相有联系的源码文件的联动混淆;代码结构未发生变化,也能获取字节码,破解难度不大,只是增加了阅读的难度。
3.用加解密方式是非常好的一种方式,对代码进行加密,在执行时解密。不过操作难度较大,需要修改解释器内置密钥,禁用pyc和字节码文件。
4.可以使用Cython这个库来对项目进行加密。虽说 Cython
的主要目的是带来性能的提升,但是基于它的原理:将 .py
/.pyx
编译为 .c
文件,再将 .c
文件编译为 .so
(Unix)或 .pyd
(Windows),其带来的另一个好处就是难以破解。完成后删除.py/.c文件,只保留.so/.pyd文件,可以作为包正常引用运行。
Cython 实质就是把py 代码编译成 C 或 C++ 代码来执行(类似于windows中的 .dll 动态链接库),在Linux 上会生成 . so 二进制文件,Windows下为 .pyd ,所以还有一个作用是加速代码的执行效率。【注意】 .pyd 文件不能在 Linux 下使用,反之亦然!但还有一些限制如项目中不能删除 __init__.py 否者包导入会失败。详细可参考官方文档。
安装cython
pip install Cython
安装 Microsoft Visual Studio 2022(windows下)
Windows 下需要安装 VS 才能编译,Linux 下只要安装 gcc 等即可,不像windows那样需要安装这么臃肿的软件/组件。