1. 程式人生 > 實用技巧 >python 加密 so 轉載:https://mp.weixin.qq.com/s/xmr3fs72XeJn-sMIoGftNA

python 加密 so 轉載:https://mp.weixin.qq.com/s/xmr3fs72XeJn-sMIoGftNA

在實際的工作中,有時候我們需要部署自己的Python應用,但這時候我們並不希望別人能夠看到自己的Python源程式。因此,我們需要為自己的原始碼進行加密,Python已經為我們提供了這樣一套工作機制。
  第一種加密Python原始碼的方式,是將.py檔案轉化為.pyc檔案,但這種加密方式很容易被反編譯,因此實用性並不高。
  第二種加密Python原始碼的方式,是將.py檔案轉化為.so檔案,這樣加密的可靠性非常高,無法被被人破解,也就很好地保護了原始碼。
  本文以Linux系統(Ubuntu)為例,講解如何將自己的Python程式(.py檔案)加密為.so檔案。

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

$sudoaptinstallpython3-devgcc
$pip3installcython

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

pythontest中的檔案

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

importdatetime

classToday():
defget_time(self):
print(datetime.datetime.now())

defsay(self):
print("hellofromJC!")

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

fromdistutils.coreimportsetup
fromCython.Buildimportcythonize

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

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

frommytestimportToday

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

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

$python3so_test.py
$python3setup.pybuild_ext

輸出如下:

2019-01-1821:15:21.126709
hellofromJC!

執行完加密命令列(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檔案,當然也可以寫個指令碼實現更復雜的功能。