使用Cython加密Python代码防止反编译

 更新时间:2024年05月09日 14:54:22   作者:Lorin洛林  
本文我们主要介绍如何使用 Cython 加密源代码,虽然 Cython 的作用主要是为了提高代码的运行效率,但是也对源代码有一定的加密效果,需要的朋友可以参考下

前言

  • 本文我们主要介绍如何使用 Cython 加密源代码,虽然 Cython 的作用主要是为了提高代码的运行效率,但是也对源代码有一定的加密效果。

使用 Cython 加密 Python 代码

环境

  • win11
  • Python 3.x

Python 源代码

# dependency.py
def some_function(x, y):
    return x * y


# example.py
from dependency import some_function


def add(x, y):
    return x + y + some_function(x, y)


if __name__ == '__main__':
    print(add(3, 4))

编写 Cython 编译配置文件

# setup.py
from distutils.core import setup
from Cython.Build import cythonize

setup(
    # 程序名
    name='test',
    # 需要编译的脚本列表
    ext_modules=cythonize(
        [
            "dependency.py",
            "example.py",
            # ...
        ],
        # Python 版本
        language_level=3
    ),
)

编译

  • python setup.py build_ext --inplace 命令的作用是在当前目录中构建 C/C++ 扩展模块,并将编译后的模块放置在当前目录中,以便在开发过程中进行测试和调试。
# 执行成功日志

版权所有(C) Microsoft Corporation。保留所有权利。
[1/2] Cythonizing dependency.py
[2/2] Cythonizing example.py
dependency.c
  正在创建库 build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.lib 和对象 build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.exp
正在生成代码
已完成代码的生成
example.c
  正在创建库 build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.lib 和对象 build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.exp
正在生成代码
已完成代码的生成

查看输出文件

  • 可以看到编译完成后,我们在当前目录生成了 .c 源文件和 .pyd 的二进制 windows 动态链接库文件,在 linux 环境下生成的是 .so 为后缀的共享对象文件。

使用

  • .so 文件和 .pyd 文件 使用和原 .py 文件使用方式一致,但 .pyd 文件名需要和原文件名保持一致。
# run.py

import example

if __name__ == '__main__':
    print(example.add(3, 4))

问题

  • 下面是实践过程中遇到的一些问题,可以参考:

error: Microsoft Visual C++ 14.0 or greater is required

pyconfig.h(59): fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory

  • 这是因为我们还需要另外两个组件,继续使用 visualstudio 工具进行安装:

  • 由于电脑系统是 win11,所有选择 win11 SDK0

dynamic module does not define module export function

  • 在 run.py 中使用 .pyd 时,需要和原文件名称保持一致,否则会出现如上错误,比如上面的示例中原文件为 example.py 则生成的链接文件应该为 example.pyd

拓展

.py .pyc .pyd .so .pyx 的区别

.py 文件

  • 标准的 Python 源代码文件,包含 Python 代码。你可以使用文本编辑器(如Notepad++、Sublime Text、Atom等)来编辑这些文件。

.pyc 文件

  • Python 编译后的字节码文件。当你运行一个 .py 文件时,Python 解释器会将其编译成字节码,然后将字节码保存到 .pyc 文件中,以便下次运行时可以更快地加载。这些文件是平台无关的,因此可以在不同的操作系统上共享。

.pyd 文件

  • Windows 平台上的 Python DLL 文件。它们包含编译后的 Python 模块,通常是用C、C++或其他语言编写的扩展模块。这些文件允许 Python 与底层操作系统或硬件进行交互,例如,访问操作系统的API或使用硬件设备。

.so 文件

  • 类Unix系统(如Linux)上的共享对象文件,类似于 Windows 上的 DLL 文件。它们通常是使用 C 或 C++ 编写的 Python 模块的编译版本。这些文件通常用于扩展 Python 的功能,以便与底层系统进行交互或提高性能。

.pyx 文件

  • Cython 代码文件。Cython 是一种使 Python 代码能够与 C 语言进行混合编程的工具。.pyx 文件包含了同时具有 Python 和 C 语法的代码,可以通过 Cython 编译器转换为 C 代码,然后编译成 Python 可执行模块(.pyd 或 .so 文件)。

以上就是使用Cython加密Python代码防止反编译的详细内容,更多关于Cython加密Python代码的资料请关注脚本之家其它相关文章!

相关文章

  • Python 图片文字识别的实现之PaddleOCR

    Python 图片文字识别的实现之PaddleOCR

    OCR方向的工程师,之前一定听说过PaddleOCR这个项目,其主要推荐的PP-OCR算法更是被国内外企业开发者广泛应用,短短半年时间,累计Star数量已超过15k,频频登上Github Trending和Paperswithcode 日榜月榜第一
    2021-11-11
  • python去掉字符串中重复字符的方法

    python去掉字符串中重复字符的方法

    这篇文章主要介绍了python去掉字符串中重复字符的方法,需要的朋友可以参考下
    2014-02-02
  • Python文件的操作处理详解

    Python文件的操作处理详解

    今天这篇文章给大家介绍Python文件的操作处理,文章内容介绍的很详细,有需要的可以参考借鉴,希望能够给你带来帮助
    2021-10-10
  • Python的log日志功能及设置方法

    Python的log日志功能及设置方法

    今天小编就为大家分享一篇Python的log日志功能及设置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python 发送SMTP邮件的简单教程

    Python 发送SMTP邮件的简单教程

    SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,Python内置对SMTP的支持,可以发送纯文本文件,HTML邮件以及附带文件。本文讲解如何使用python发送邮件
    2021-06-06
  • python批量修改文件编码格式的方法

    python批量修改文件编码格式的方法

    这篇文章主要为大家详细介绍了python批量修改文件编码格式的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 基于python实现鼠标实时坐标监测

    基于python实现鼠标实时坐标监测

    这篇文章主要给大家介绍了如何基于python实现鼠标实时坐标监测,文章通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-11-11
  • win系统下为Python3.5安装flask-mongoengine 库

    win系统下为Python3.5安装flask-mongoengine 库

    MongoEngine 是一个用来操作 MongoDB 的 ORM 框架,如果你不知道什么是 ORM,可以参考 Flask-SQLAlchemy 一节。在 Flask 中,我们可以直接使用 MongoEngine,也可使用 Flask-MongoEngine ,它使得在 Flask 中使用 MongoEngine 变得更加简单。
    2016-12-12
  • 配置jupyter notebook全步骤,更改默认路径,jupyter不是问题

    配置jupyter notebook全步骤,更改默认路径,jupyter不是问题

    这篇文章主要介绍了配置jupyter notebook全步骤,更改默认路径,jupyter不是问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • python 内置函数filter

    python 内置函数filter

    这篇文章主要介绍了python 内置函数filter的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论