欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Cython加密Python代碼防止反編譯

 更新時(shí)間:2024年05月09日 14:54:22   作者:Lorin洛林  
本文我們主要介紹如何使用 Cython 加密源代碼,雖然 Cython 的作用主要是為了提高代碼的運(yùn)行效率,但是也對(duì)源代碼有一定的加密效果,需要的朋友可以參考下

前言

  • 本文我們主要介紹如何使用 Cython 加密源代碼,雖然 Cython 的作用主要是為了提高代碼的運(yùn)行效率,但是也對(duì)源代碼有一定的加密效果。

使用 Cython 加密 Python 代碼

環(huán)境

  • 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))

編寫(xiě) 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 命令的作用是在當(dāng)前目錄中構(gòu)建 C/C++ 擴(kuò)展模塊,并將編譯后的模塊放置在當(dāng)前目錄中,以便在開(kāi)發(fā)過(guò)程中進(jìn)行測(cè)試和調(diào)試。
# 執(zhí)行成功日志

版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。
[1/2] Cythonizing dependency.py
[2/2] Cythonizing example.py
dependency.c
  正在創(chuàng)建庫(kù) build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.lib 和對(duì)象 build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.exp
正在生成代碼
已完成代碼的生成
example.c
  正在創(chuàng)建庫(kù) build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.lib 和對(duì)象 build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.exp
正在生成代碼
已完成代碼的生成

查看輸出文件

  • 可以看到編譯完成后,我們?cè)诋?dāng)前目錄生成了 .c 源文件和 .pyd 的二進(jìn)制 windows 動(dòng)態(tài)鏈接庫(kù)文件,在 linux 環(huán)境下生成的是 .so 為后綴的共享對(duì)象文件。

使用

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

import example

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

問(wèn)題

  • 下面是實(shí)踐過(guò)程中遇到的一些問(wèn)題,可以參考:

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

pyconfig.h(59): fatal error C1083: 無(wú)法打開(kāi)包括文件: “io.h”: No such file or directory

  • 這是因?yàn)槲覀冞€需要另外兩個(gè)組件,繼續(xù)使用 visualstudio 工具進(jìn)行安裝:

  • 由于電腦系統(tǒng)是 win11,所有選擇 win11 SDK0。

dynamic module does not define module export function

  • 在 run.py 中使用 .pyd 時(shí),需要和原文件名稱(chēng)保持一致,否則會(huì)出現(xiàn)如上錯(cuò)誤,比如上面的示例中原文件為 example.py 則生成的鏈接文件應(yīng)該為 example.pyd

拓展

.py .pyc .pyd .so .pyx 的區(qū)別

.py 文件

  • 標(biāo)準(zhǔn)的 Python 源代碼文件,包含 Python 代碼。你可以使用文本編輯器(如Notepad++、Sublime Text、Atom等)來(lái)編輯這些文件。

.pyc 文件

  • Python 編譯后的字節(jié)碼文件。當(dāng)你運(yùn)行一個(gè) .py 文件時(shí),Python 解釋器會(huì)將其編譯成字節(jié)碼,然后將字節(jié)碼保存到 .pyc 文件中,以便下次運(yùn)行時(shí)可以更快地加載。這些文件是平臺(tái)無(wú)關(guān)的,因此可以在不同的操作系統(tǒng)上共享。

.pyd 文件

  • Windows 平臺(tái)上的 Python DLL 文件。它們包含編譯后的 Python 模塊,通常是用C、C++或其他語(yǔ)言編寫(xiě)的擴(kuò)展模塊。這些文件允許 Python 與底層操作系統(tǒng)或硬件進(jìn)行交互,例如,訪(fǎng)問(wèn)操作系統(tǒng)的API或使用硬件設(shè)備。

.so 文件

  • 類(lèi)Unix系統(tǒng)(如Linux)上的共享對(duì)象文件,類(lèi)似于 Windows 上的 DLL 文件。它們通常是使用 C 或 C++ 編寫(xiě)的 Python 模塊的編譯版本。這些文件通常用于擴(kuò)展 Python 的功能,以便與底層系統(tǒng)進(jìn)行交互或提高性能。

.pyx 文件

  • Cython 代碼文件。Cython 是一種使 Python 代碼能夠與 C 語(yǔ)言進(jìn)行混合編程的工具。.pyx 文件包含了同時(shí)具有 Python 和 C 語(yǔ)法的代碼,可以通過(guò) Cython 編譯器轉(zhuǎn)換為 C 代碼,然后編譯成 Python 可執(zhí)行模塊(.pyd 或 .so 文件)。

以上就是使用Cython加密Python代碼防止反編譯的詳細(xì)內(nèi)容,更多關(guān)于Cython加密Python代碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 圖片文字識(shí)別的實(shí)現(xiàn)之PaddleOCR

    Python 圖片文字識(shí)別的實(shí)現(xiàn)之PaddleOCR

    OCR方向的工程師,之前一定聽(tīng)說(shuō)過(guò)PaddleOCR這個(gè)項(xiàng)目,其主要推薦的PP-OCR算法更是被國(guó)內(nèi)外企業(yè)開(kāi)發(fā)者廣泛應(yīng)用,短短半年時(shí)間,累計(jì)Star數(shù)量已超過(guò)15k,頻頻登上Github Trending和Paperswithcode 日榜月榜第一
    2021-11-11
  • python去掉字符串中重復(fù)字符的方法

    python去掉字符串中重復(fù)字符的方法

    這篇文章主要介紹了python去掉字符串中重復(fù)字符的方法,需要的朋友可以參考下
    2014-02-02
  • Python文件的操作處理詳解

    Python文件的操作處理詳解

    今天這篇文章給大家介紹Python文件的操作處理,文章內(nèi)容介紹的很詳細(xì),有需要的可以參考借鑒,希望能夠給你帶來(lái)幫助
    2021-10-10
  • Python的log日志功能及設(shè)置方法

    Python的log日志功能及設(shè)置方法

    今天小編就為大家分享一篇Python的log日志功能及設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python 發(fā)送SMTP郵件的簡(jiǎn)單教程

    Python 發(fā)送SMTP郵件的簡(jiǎn)單教程

    SMTP(Simple Mail Transfer Protocol)簡(jiǎn)單郵件傳輸協(xié)議,Python內(nèi)置對(duì)SMTP的支持,可以發(fā)送純文本文件,HTML郵件以及附帶文件。本文講解如何使用python發(fā)送郵件
    2021-06-06
  • python批量修改文件編碼格式的方法

    python批量修改文件編碼格式的方法

    這篇文章主要為大家詳細(xì)介紹了python批量修改文件編碼格式的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 基于python實(shí)現(xiàn)鼠標(biāo)實(shí)時(shí)坐標(biāo)監(jiān)測(cè)

    基于python實(shí)現(xiàn)鼠標(biāo)實(shí)時(shí)坐標(biāo)監(jiān)測(cè)

    這篇文章主要給大家介紹了如何基于python實(shí)現(xiàn)鼠標(biāo)實(shí)時(shí)坐標(biāo)監(jiān)測(cè),文章通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-11-11
  • win系統(tǒng)下為Python3.5安裝flask-mongoengine 庫(kù)

    win系統(tǒng)下為Python3.5安裝flask-mongoengine 庫(kù)

    MongoEngine 是一個(gè)用來(lái)操作 MongoDB 的 ORM 框架,如果你不知道什么是 ORM,可以參考 Flask-SQLAlchemy 一節(jié)。在 Flask 中,我們可以直接使用 MongoEngine,也可使用 Flask-MongoEngine ,它使得在 Flask 中使用 MongoEngine 變得更加簡(jiǎn)單。
    2016-12-12
  • 配置jupyter notebook全步驟,更改默認(rèn)路徑,jupyter不是問(wèn)題

    配置jupyter notebook全步驟,更改默認(rèn)路徑,jupyter不是問(wèn)題

    這篇文章主要介紹了配置jupyter notebook全步驟,更改默認(rèn)路徑,jupyter不是問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • python 內(nèi)置函數(shù)filter

    python 內(nèi)置函數(shù)filter

    這篇文章主要介紹了python 內(nèi)置函數(shù)filter的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評(píng)論