1. 程式人生 > 實用技巧 >利用Cython對python程式碼進行加密

利用Cython對python程式碼進行加密

利用Cython對python程式碼進行加密

Cython是屬於PYTHON的超集,他首先會將PYTHON程式碼轉化成C語言程式碼,然後通過c編譯器生成可執行檔案。優勢:資源豐富,適合快速開發。翻譯成C後速度比較快,在windows環境中用cython加密後的檔案字尾是pyd檔案,在linux環境中加密後的問題字尾是so檔案,下面以linux環境作為演示

環境準備

系統環境:centos 7

Python版本:python3.x

需要的第三方包:cython

加密程式碼部分

encryption.py

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(["Jruing.py"])) # 列表中是要加密的檔名

要加密的程式碼部分

Jruing.py

def hello_world():
print("hello world!!!")

將以上程式碼儲存為encryption.py,在命令列中輸入python encryption.py build_ext,它會在encryption.py這個檔案的當前路徑下生成build資料夾,build/lib-*/Jruing-*.so (“*”部分代表的是Python版本等一系列資訊,這個不重要,windows環境會在同樣的目錄下生成Jruing-*.pyd檔案),我們可以把這個so檔案直接重新命名為Jruing.so

呼叫加密後的檔案中的函式

我們進入到so檔案所在的目錄,編寫一個呼叫hello_world的程式

from Jruing import hello_world # Jruing為so檔案的檔名
hello_world()

加密Flask Web服務

flask 檔案一般會建立一個app物件,它啟動也是通過這個app物件去啟動的,直接加密會加密成功,但是執行會出現問題,我們可以在呼叫檔案中匯入app物件,然後app.run()啟動就可以了,具體操作如下

一個flask web服務Demo

flask_demo.py

from flask import Flask
app = Flask(__name__) @app.route('/',methods=['GET'])
def root():
return "hello world"
if __name__ == '__main__':
app.run(host='127.0.0.1',port=5000)

在加密之前我們把它改為

flask_demo_test.py

from flask import Flask
app = Flask(__name__) @app.route('/',methods=['GET'])
def root():
return "hello world"

用上面提到的方法對flask_demo_test.py檔案進行加密

呼叫flask_demo_test.py啟動服務

from flask_demo_test import app
app.run(host='127.0.0.1',port=5000)

這樣就好了!!!!