python脚本加密的常用方式

在项目中有时不想别人看到我们写的python脚本内容,这时候我们需要将我们的python脚本进行加密,其实是不像让别人看到我写的代码太LOW了,(*^_^*)

python脚本加密常用的有两种方式,一种是将文件.py文件转换为.pyc文件,但是这种加密方式可以被反编译,骗骗小白还是可以的,另一种方式则是使用cython将我们的脚本转换为.so文件

我的测试代码很简单

func.py文件,存放在test_func目录下

#!/usr/bin/python3
#coding:utf-8

def test(name):
    return "hello {} !".format(name)

test.py文件

#!/usr/bin/python3
#coding:utf-8
from test_func.func import test

print(test("sulao"))

上述执行python3 test.py脚本执行直接返回

hello sulao !

这里我们对func.py文件进行加密,不像让别人看到我的函数具体内容,然后再进行测试

1.转换为pyc文件的方式很简单,执行命令

python -m compileall test_func
#打印
Listing 'test_func'...
Compiling 'test_func\\func.py'...

接着我们去test_func目录下看到出现了一个__pycache__目录,下面有一个func.cpython-37.pyc的文件,接着我们删除原有的test_func目录下的func.py文件,将生成的func.cpython-37.pyc文件改名为func.pyc文件复制到原来func.py文件目录,发现再次执行test.py和原来未加密前的结果一致,没有任何报错

上述加密方式操作很简单,但是目前来说这种加密方式很容易破解,基本只要一条命令即可换远程原有py脚本,而且此种加密方式兼容性很差

接着我们来看看第二种加密方式吧

2.将py文件转换为.so加密文件

此操作需要切换到linux上操作,需要使用到gcc和python-dev

我们需要进行安装

yum install gcc python3-devel -y

我们需要cython模块

pip3 install cython

然后我们需要编写一个setup.py转换文件

#!/usr/bin/python3
#coding:utf-8
from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize(['func.py']))

执行

python3 setup.py build_ext

微信截图_20191207123738.jpg

看到多出来了一个build目录和func.c文件

build目录下lib.linux-x86_64-3.6下有一个func.cpython-36m-x86_64-linux-gnu.so文件,temp.linux-x86_64-3.6目录下有一个func.o文件

接下来我们将so文件移到test.py同级目录

mv build/lib.linux-x86_64-3.6/func.cpython-36m-x86_64-linux-gnu.so ./

然后删除func.py文件,再次执行python3 test.py

hello sulao !

发现返回还是之前的结果,说明我们的加密成功了

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/759.html