首页/文章/ 详情

ANSA二次开发:基于ANSA运行的代码如何加密

2月前浏览94
有道友今天问python如何加密。不清楚他是想知道纯粹的python源码加密还是基于ANSA的加密。在这里介绍python的加密方式:

方法一:python打包成.pyc格式的字节码文件。

在运行我们新写的源码时,python编译器会自动检查是否存在对应的pyc文件,若存在就直接调用。否则将在__pycache__ 目录下生成对应的pyc文件,这个文件是可以替代源码文件直接使用的。当然我们也可以通过 py_compile 模块手动打包。



import py_compile
py_compile.compile("test.py")
即可将test.py打包成test.pyc文件。但.pyc格式文件不是真正的加密文件,这类文件可以轻松的反编译恢复源码。



# pip install uncompyle6
uncompyle6 test.pyc > test.py
.pyc文件虽然可以通过字节码混淆等手段实现字节码加密,使得反编译困难,但这种方法属于治标不治本。推荐做法是将源码编译成.pyd格式的动态库实现加密。

方法二:利用Cython打包成.pyd格式的动态库文件(推荐)

在要打包的test.py文件同目录下新键一个 setup.py 文件,文件内容如下:









# pip install cython
from setuptools import setupfrom Cython.Build import cythonize
setup(    name="testModule",    ext_modules=cythonize("test.py"),    )

在命令行或终端中,cd 到这个目录下,输入以下命令:python setup.py build_ext --inplace 即可生成.pyd格式的文件。生成的.pyd格式反编译难度就显著增加了,若再进一指令优化、二进制符号剥离等技术可使.pyd格式的文件成为高度优化的机器码,且 无任何可读性残留,达到商业级保护标准。

pyd格式文件的调用和平时库的调用方法相同。直接import即可。

注意:.pyd格式的文件需要要个对应python版本,即3.8打包生成的pyd文件只能在python3.8的环境下运行。


方法三:利用ANSA的CompileScript接口将源码打包成pyb格式文件。








import ansa
def toCompile():  ansa.CompileScript(r"绝对路径\test.py",r"绝对路径\test.pyb","testModule")
if __name__ == '__main__':  toCompile()    
在ansa环境中直接运行上述代码即可生成.pyb格式的文件。该格式文件只能在ansa中运行且向下兼容。即利用ANSA22生成的pyb文件在22及以上版本可以使用,但在低于22的版本无法运行。

来源:檐苔
二次开发ANSApython
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-09-11
最近编辑:2月前
青瓦松
硕士 签名征集中
获赞 42粉丝 2文章 48课程 0
点赞
收藏
作者推荐

预备知识1-数据操作学习笔记

数据的两种基本操作:(1) 数据获取;(2) 将数据读入计算机后对其进行处理。张量(tensor):N维数组。在MXNet中为ndarray,在PyTorch和TensorFlow中为Tensor,都与numpy中的ndarray相似。但深度学习框架比Numpy的ndarray多一些重要功能:(1) GPU很好地支持加速计算,而NumPy仅支持CPU计算;(2) 张量类支持自动微分。 一、入门torch的基本操作二、运算符对于任意具有相同形状的张量,常见的标准算术运算符(+、 -、 *、 /和**)都可以被升级为按元素运算。多个张量连结(concatenate)张量的逻辑运算元素求和三、广播机制形状不同,通过调用广播机制(broadcasting mechanis m)来执行按元素操作,工作机制如下:1. 通过适当复 制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状;2. 对生成的数组执行按元素操作。大多数情况下,我们将沿着数组中长度为1的轴进行广播四、索引和切片 五、节省内存 运行一些操作可能会导致为新结果分配内存。例如,如果我们用Y=X+Y,我们将取消引用Y指向的张量,而是指向新分配的内存处的张量。返回值为False,说明以上操作导致Y内存地址进行重新分配。这是不可取的,原因有两个:1. 首先,我们不想总是不必要地分配内存。在机器学习中,可能有数百兆的参数,且在一秒内多次更新所有参数。通常情况下,我们希望原地执行这些更新;2. 若不原地更新,其他引用仍指向旧的内存地址而出现错误。六、转换为其他Python对象torch张量和numpy数组将共享它们的底层内存,就地操作更改一个张量也会同时更改另一个张量。来源:檐苔

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈