python 加密 so 轉載:https://mp.weixin.qq.com/s/xmr3fs72XeJn-sMIoGftNA
在實際的工作中,有時候我們需要部署自己的Python應用,但這時候我們並不希望別人能夠看到自己的Python源程式。因此,我們需要為自己的原始碼進行加密,Python已經為我們提供了這樣一套工作機制。
第一種加密Python原始碼的方式,是將.py檔案轉化為.pyc檔案,但這種加密方式很容易被反編譯,因此實用性並不高。
第二種加密Python原始碼的方式,是將.py檔案轉化為.so檔案,這樣加密的可靠性非常高,無法被被人破解,也就很好地保護了原始碼。
本文以Linux系統(Ubuntu)為例,講解如何將自己的Python程式(.py檔案)加密為.so檔案。
$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檔案,當然也可以寫個指令碼實現更復雜的功能。