tft每日頭條

 > 科技

 > python模式識别的代碼

python模式識别的代碼

科技 更新时间:2025-01-17 04:38:28

Python 語法簡單,使用方便,我們可以使用它快速地編寫程序和構建應用。 在編寫好程序之後,我們必然要進行程序的分發。

如果我們寫的是圖形界面程序,可能會打包成相應操作系統平台的二進制運行文件 (當然也可能直接發 Python 代碼給别人運行)。

私信小編01即可獲取大量Python學習資料

如果我們寫的是 Web 應用程序,則需要部署在指定的服務器上 。

而這,就涉及到了 源碼保護的問題 。我們不需要程序的使用者能夠看到程序的源碼。但是,Python 作為一門動态語言和腳本語言,運行通過它編寫的程序,并不需要進行靜态編譯和打包的過程, 對其代碼進行加密是一件很麻煩、複雜和困難的事情

如果構建好的 Python 應用程序隻是我們内部使用,或者部署在服務器上以 SaaS 化的形式供使用者使用,那麼也根本無需考慮 Python 代碼加密和源碼洩露的問題。

但是,如果我們編寫的程序是要進行商業授權的呢?

源碼的保護則是必須要做的一件事情。

雖然很難,雖然不是十分完美,但是多增加一道門檻,也就多抵擋一些閑得蛋疼的人搞破解。

下面,介紹幾種常見 Python 應用程序的代碼加密方式,以供參考:

一、桌面圖形程序加密

通常情況下,我們使用 PyQt5、Tkinter、WxPython 等框架編寫的圖形程序會使用 PyInstaller 進行打包,生成平台的二進制運行文件,比如 Windows 下的 exe 文件。

不過, 使用 PyInstaller 編譯打包出來的程序,很容易很反編譯回去 。

比如,使用 pyinstxtractor 這個工具,就能把 PyInstallers 編譯出來的 exe 還原回去;之後,再對還原出來的 pyc 文件進行反編譯即可。

具體的使用方法,大家可以網上搜索,都有很多文章。

如何提高圖形程序打包出二進制文件的安全性呢?

之前我們在介紹 PyQt5 程序打包時,有提到過使用 Nuitka 這個工具來減少生成二進制文件的大小。

其實, Nuitka 會将 Python 程序轉化為 C 語言程序,然後再進行編譯打包為二進制文件 。衆所周知,反編譯 C 程序的難度是巨大的。以此,我們就極高地保障了圖形界面程序的源碼安全性。

二 、Web 應用程序

對于 Python 編寫的 Web 應用程序,我們一般直接将其部署在服務器上然後對外進行服務。

但是如果是一個私有化部署的應用程序,既需要部署在客戶的機器上,又不想客戶看到應用程序的源碼。

這時候,可以考慮 将 Python 代碼文件編譯為 C 文件,然後再将 C 文件編譯為操作系統的動态鍊接庫文件 (Linux 下的 .so 文件和 Windows 下的 .pyd 文件)。

以上步驟需要使用第三方庫 cython,然後編寫一個setup.py文件用來指定需要處理的 Python 文件,例如:

fromdistutils.coreimportsetup fromCython.Buildimportcythonize setup(ext_modules=cythonize(["zmister.py"]))

這樣,就可以把 Python 文件編譯為特定操作系統平台的動态鍊接庫文件了。

同時,有一個第三方庫 jmpy3 對上述流程進行了優化,支持單個文件和整個項目進行編譯,使用起來更加友好:

python模式識别的代碼(介紹幾種Python加密源代碼的方法)1

需要注意的是,使用這種方式加密後的文件 需要使用生成時的 Python 版本 ,這也算是一個小缺點。但是這個缺點可以 通過打包為 Docker 鏡像的方式解決 掉。

三、通用加密

除了上述兩種方案,還有一個工具——PyArmor 能夠實現 Python 代碼的加密。

python模式識别的代碼(介紹幾種Python加密源代碼的方法)2

PyArmor 是一個用于加密和保護 Python 腳本的工具。它能夠在運行時刻保護 Python腳本的二進制代碼不被洩露,設置加密後 Python 源代碼的有效期限,綁 定加密後的Python源代碼到硬盤、網卡等硬件設備。它的保障機制主要包括:

  • 加密編譯後的代碼塊,保護模塊中的字符串和常量
  • 在腳本運行時候動态加密和解密每一個函數(代碼塊)的二進制代碼
  • 代碼塊執行完成之後清空堆棧局部變量
  • 通過授權文件限制加密後腳本的有效期和設備環境

除了對 Python 代碼進行加密,PyArmor 還能設置 Python 程序的許可方式,比如設置程序的使用期限、設置允許運行的設備、擴展其他認證方式 等:

python模式識别的代碼(介紹幾種Python加密源代碼的方法)3

我們直接使用 pip 命令即可對其進行安裝:

pip install pyarmor

然後,使用 obfuscate 選項就能對代碼進行加密:

pyarmor obfuscate foo.py

使用 licenses 選項即可生成許可文件:

pyarmor licenses \ --expired"2018-12-31"\ --bind-disk"100304PBN2081SF3NJ5T"\ --bind-mac"70:f1:a1:23:f0:94"\ --bind-ipv4"202.10.2.52"\ r001

使用 --with-license 參數即可指定許可文件:

pyarmor obfuscate--with-license licenses/r001/license.lic foo.py

使用 pack 選項即可打包腳本:

pyarmor pack foo.py

需要注意的是,pyarmor 是一個共享軟件,安裝之後處于試用模式,在試用模式下有一些限制,如果購買的話,也不貴,298的價格還是很良心的。

python模式識别的代碼(介紹幾種Python加密源代碼的方法)4

四、最後

除了代碼加密,Python 社區内的很多觀點也認為,加密是徒勞的,任何加密都有可能被破解,有一個良好的 法律約束條款 可能是更好的選擇,而且如今的商業模式傾向于 靠服務收費 而非産品收費。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved