使用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
- 問(wèn)題很明顯,我們需要安裝
Microsoft Visual C++14.0或更高版本
。 - 下載鏈接:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
- 安裝并選擇對(duì)應(yīng)的組件進(jìn)行安裝:
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
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-11Python 發(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實(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-11win系統(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)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12