為你的Python程式加密

程式設計師小城發表於2019-03-16

在實際的工作中,有時候我們需要部署自己的Python應用,但這時候我們並不希望別人能夠看到自己的Python源程式。因此,我們需要為自己的原始碼進行加密,Python已經為我們提供了這樣一套工作機制。

第一種加密Python原始碼的方式,是將.py檔案轉化為.pyc檔案,但這種加密方式很容易被反編譯,因此實用性並不高。

第二種加密Python原始碼的方式,是將.py檔案轉化為.so檔案,這樣加密的可靠性非常高,無法被被人破解,也就很好地保護了原始碼。

本文以Linux系統(Ubuntu)為例,講解如何將自己的Python程式(.py檔案)加密為.so檔案。

首先,我們需要在Ubuntu系統中安裝一些準備工具,包括python3-dev,gcc,Cython,其中Cython為Python的第三方模組。安裝的命令如下:

接著,我們新建pythontest資料夾,用於測試我們的程式碼,資料夾的內容如下:

其中,mytest.py為我們需要加密的Python程式,setup.py為加密的指令碼。mytest.py的程式碼如下:

加密指令碼setup.py的程式碼如下:

測試程式碼so_test.py的程式碼如下:

切換至pythontest資料夾,先執行so_test.py指令碼(為了顯示時間,便於跟後面的程式區分),再執行setup.py對mytest.py程式加密,命令如下:

輸出如下:

執行完加密命令列(python3 setup.py build_ext)後,資料夾中的檔案如下:

在build資料夾中,有我們需要的so檔案,如下:

生成的so檔案一方面對我們的源程式進行了加密,另一方面,我們還能繼續呼叫原來的mytest.py檔案中的內容。為了驗證此功能,我們先刪除mytest.py,再執行so_test.py檔案,如下:

可以發現,我們刪除了mytest.py檔案,即原始碼,但so_test.py檔案可以正常呼叫源程式的內容,這是因為,兩次執行so_test.py的輸出時間不一樣。

總結:在實際的工作中,我們可以按照上面的方法將.py程式加密為.so檔案,當然也可以寫個指令碼實現更復雜的功能。本次的文章僅作為展示,希望能夠給讀者一些啟發~

相關文章