為你的Python程序加密


  在實際的工作中,有時候我們需要部署自己的Python應用,但這時候我們並不希望別人能夠看到自己的Python源程序。因此,我們需要為自己的源代碼進行加密,Python已經為我們提供了這樣一套工作機制。
  第一種加密Python源代碼的方式,是將.py文件轉化為.pyc文件,但這種加密方式很容易被反編譯,因此實用性並不高。
  第二種加密Python源代碼的方式,是將.py文件轉化為.so文件,這樣加密的可靠性非常高,無法被被人破解,也就很好地保護了源代碼。
  本文以Linux系統(Ubuntu)為例,講解如何將自己的Python程序(.py文件)加密為.so文件。
  首先,我們需要在Ubuntu系統中安裝一些准備工具,包括python3-dev,gcc,Cython,其中Cython為Python的第三方模塊。安裝的命令如下:

$ sudo apt install python3-dev gcc
$ pip3 install cython

  接着,我們新建pythontest文件夾,用於測試我們的代碼,文件夾的內容如下:

pythontest中的文件

其中,mytest.py為我們需要加密的Python程序,setup.py為加密的腳本。mytest.py的代碼如下:

import datetime

class Today():
    def get_time(self):
        print(datetime.datetime.now())
        
    def say(self):
        print("hello from JC!")

加密腳本setup.py的代碼如下:

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules = cythonize(["mytest.py"]))

測試代碼so_test.py的代碼如下:

from mytest import Today

t = Today()
t.get_time()
t.say()

  切換至pythontest文件夾,先運行so_test.py腳本(為了顯示時間,便於跟后面的程序區分),再運行setup.py對mytest.py程序加密,命令如下:

$ python3 so_test.py
$ python3 setup.py build_ext

輸出如下:

2019-01-18 21:15:21.126709
hello from JC!

運行完加密命令行(python3 setup.py build_ext)后,文件夾中的文件如下:

生成build文件夾

在build文件夾中,有我們需要的so文件,如下:

so文件

生成的so文件一方面對我們的源程序進行了加密,另一方面,我們還能繼續調用原來的mytest.py文件中的內容。為了驗證此功能,我們先刪除mytest.py,再運行so_test.py文件,如下:

測試so文件的調用

可以發現,我們刪除了mytest.py文件,即源代碼,但so_test.py文件可以正常調用源程序的內容,這是因為,兩次運行so_test.py的輸出時間不一樣。
  總結:在實際的工作中,我們可以按照上面的方法將.py程序加密為.so文件,當然也可以寫個腳本實現更復雜的功能。本次的文章僅作為展示,希望能夠給讀者一些啟發~

注意:本人現已開通微信公眾號: Python爬蟲與算法(微信號為:easy_web_scrape), 歡迎大家關注哦~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM