最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

使用 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))

編寫 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++ 擴展模塊,并將編譯后的模塊放置在當(dāng)前目錄中,以便在開發(fā)過程中進行測試和調(diào)試。
# 執(zhí)行成功日志

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

查看輸出文件

  • 可以看到編譯完成后,我們在當(dāng)前目錄生成了 .c 源文件和 .pyd 的二進制 windows 動態(tài)鏈接庫文件,在 linux 環(huán)境下生成的是 .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

  • 這是因為我們還需要另外兩個組件,繼續(xù)使用 visualstudio 工具進行安裝:

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

dynamic module does not define module export function

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

拓展

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

.py 文件

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

.pyc 文件

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

.pyd 文件

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

.so 文件

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

.pyx 文件

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

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

相關(guān)文章

  • Flask應(yīng)用部署與多端口管理實踐全指南

    Flask應(yīng)用部署與多端口管理實踐全指南

    在開發(fā)和部署Web應(yīng)用時,開發(fā)者常常需要處理多端口服務(wù),防火墻配置以及生產(chǎn)環(huán)境優(yōu)化等問題,下面小編就來和大家簡單講講Flask應(yīng)用部署與多端口管理實踐的相關(guān)知識吧
    2025-04-04
  • 使用selenium+chromedriver+xpath爬取動態(tài)加載信息

    使用selenium+chromedriver+xpath爬取動態(tài)加載信息

    這篇文章主要介紹了使用selenium+chromedriver+xpath爬取動態(tài)加載信息
    2022-02-02
  • Python實現(xiàn)SICP賦值和局部狀態(tài)

    Python實現(xiàn)SICP賦值和局部狀態(tài)

    這篇文章主要介紹了Python實現(xiàn)SICP 賦值和局部狀態(tài)的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Python中bisect的用法

    Python中bisect的用法

    這篇文章主要介紹了Python中bisect的用法,主要講述了針對數(shù)組的插入及排序操作,非常具有實用價值,需要的朋友可以參考下
    2014-09-09
  • 簡單理解Python中基于生成器的狀態(tài)機

    簡單理解Python中基于生成器的狀態(tài)機

    這篇文章主要介紹了簡單理解Python中基于生成器的狀態(tài)機,來自于IBM官方技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python簡單調(diào)用MySQL存儲過程并獲得返回值的方法

    Python簡單調(diào)用MySQL存儲過程并獲得返回值的方法

    這篇文章主要介紹了Python調(diào)用MySQL存儲過程并獲得返回值的方法,涉及Python操作MySQL存儲過程的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 跟老齊學(xué)Python之集合(set)

    跟老齊學(xué)Python之集合(set)

    本文主要內(nèi)容是要向各位介紹一種新的數(shù)據(jù)類型:集合(set).徹底暈倒了,到底python有多少個數(shù)據(jù)類型呢?又多出來了一個.
    2014-09-09
  • PyTorch基本數(shù)據(jù)類型(一)

    PyTorch基本數(shù)據(jù)類型(一)

    這篇文章主要為大家詳細(xì)介紹了PyTorch基本數(shù)據(jù)類型,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • pytorch鎖死在dataloader(訓(xùn)練時卡死)

    pytorch鎖死在dataloader(訓(xùn)練時卡死)

    這篇文章主要介紹了pytorch鎖死在dataloader(訓(xùn)練時卡死),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python隨機數(shù)模塊詳情

    Python隨機數(shù)模塊詳情

    這篇文章主要介紹了Python隨機數(shù)模塊,隨機數(shù)模塊實現(xiàn)了各種分布的偽隨機數(shù)生成器。對于整數(shù),從范圍中有統(tǒng)一的選擇。 對于序列,存在隨機元素的統(tǒng)一選擇、用于生成列表的隨機排列的函數(shù)、以及用于隨機抽樣而無需替換的函數(shù),下文來看看詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11

最新評論

辽宁省| 洛阳市| 宜兰县| 屯昌县| 克东县| 综艺| 杭州市| 广丰县| 西乌珠穆沁旗| 黄大仙区| 崇阳县| 新兴县| 自治县| 泉州市| 建阳市| 镇巴县| 六枝特区| 许昌县| 浏阳市| 郓城县| 涟水县| 南江县| 秦皇岛市| 营山县| 海兴县| 海阳市| 广安市| 侯马市| 福建省| 南部县| 玉树县| 石首市| 汪清县| 休宁县| 仁寿县| 米脂县| 神农架林区| 南开区| 襄汾县| 公主岭市| 通山县|