Python愈來愈熱門了,2019年3月TIOBE編程語言排行榜上,Python更是罕見的擊敗了「霸榜三巨頭」之一的C++,擠進前三。
python
Python優勢不少,好比簡單易學,代碼量少,能作的事不少等等,和其餘語言同樣,Pyhton也有一些不可掩蓋的缺點,版本不兼容,運行效率不高等等。程序員
其中一個缺點,讓很多開發者頭疼不已,因爲Python解釋器開源的關係,致使Python代碼沒法加密,代碼的安全性得不到保障。算法
固然,想要加密Python代碼,也並不是無解。最多見的加密方式有4種,還有1種獨特的加密方式。編程
1,Python解釋器在執行代碼的過程當中,會首先生成.pyc文件,而後再解釋執行.pyc中的內容,固然,解釋器也能直接執行.pyc文件。windows
.pyc文件是一個二進制的文件,是不具有可讀性的。安全
假如咱們發到客戶環境時,是.pyc文件,而不是.py,那麼是否是就能夠保護咱們的Python代碼?編程語言
想要作到這一點,並不難。Python標準庫就提供了一個名叫compileall的庫,使用它就能夠作到。函數
執行以下命令,便可將目錄下的全部.py文件編譯成.pyc文件:工具
python -m compileall 而後刪除 目錄下全部 .py 文件就能夠了。性能
$ find -name '*.py' -type f -print -exec rm {} ;
這一方法,能夠加密咱們的Python代碼,賽過代碼裸在外面。尷尬的是,由於Python解釋器的兼容較差,有些版本並不能運行.pyc文件。並且已經有現成的反編譯工具,能夠直接破解。
好比python-uncompyle6(「連接」),只要執行如下命令,就能夠搞定。
$ uncompyle6 *compiled-python-file-pyc-or-pyo*
python開發等相關IT技術羣:887934385 分享技術 分享資料 交流問題
關於怎麼快速學python,能夠加下小編的python學習羣:611+530+101,無論你是小白仍是大牛,小編我都歡迎,不按期分享乾貨
天天晚上20:00都會開直播給你們分享python學習知識和路線方法,羣裏會不按期更新最新的教程和學習方法,你們都是學習python的,或是轉行,或是大學生,還有工做中想提高本身能力的,若是你是正在學習python的小夥伴能夠加入學習。最後祝全部程序員都可以走上人生巔峯,讓代碼將夢想照進現實
2
代碼混淆,也是一種常見的「加密」方式,嚴格意義上說,這一方法並非加密,而是上代碼的可讀性變差。好比刪除註釋,添加毫無心義的註釋,添加無效代碼,對變量、函數、類進行重命名等。
內容不可讀,代碼就受到了保護。
代碼混淆的工具不少,一個比較好用的混淆庫是pyobfuscate(GitHub - astrand/pyobfuscate: pyobfuscate)。這個庫能夠對類、函數進行重命名,而且插入無關的代碼,甚至自動加空格等等。
這一方法很簡單,也提升了破解的門檻。但因爲代碼結構未發生變化,字節碼也能獲取,破解難度也不高。
通常而言,使用這一方式較爲簡單,實用。
3
若是有一款工具,能夠將Python腳本打包成在某一平臺的可執行文件,最終咱們發行的,是一份打包完成的二進制文件,那麼程序就更難被破解了?
py2exe(FrontPage - py2exe.orgFrontPage - py2exe.org)就是一款很好的打包工具,能夠將Python腳本打包成可在Windows上運行的文件。
這一方式的優勢是進一步提升了破解門檻。遺憾的是,你只能在windows上運行它。
4
Python運行速度慢何解?用Cython就能夠帶來性能的提高。實際上,Cython也能夠用來加密Python代碼。
Cython的原理是,將.py編譯爲.c文件,再將.c文件編譯爲.so或者.pyd,這樣一來,文件就變得難以破解了。
這樣作的好處是,Python代碼很難被破解,缺點是有時候,Cython可能不支持一小部分代碼,完善起來就比較麻煩了。
5
最後一種方法,作得比較絕。
因爲Python是解釋型語言,所以在發行Python程序的時候,就必須包含一個Python解釋器,若是咱們修改這個解釋器,代碼不就被保護起來了嗎?
若是咱們能對最原始的Python代碼進行加密,加密後的代碼被髮行後。哪怕被別人看到了,但由於不曉得算法是怎樣的,就破解不了了。
這是由於Python解釋器自己是一個二進制文件,天然也就沒法得到關鍵性的數據,進而保護了源碼。
雖然這一方法最爲安全,可操做難度較高。你必須掌握基本的加解密算法,還要探究Python執行代碼的方式,從而瞭解到從什麼地方進行加解密。最後禁用字節碼,以防經過.pyc反編譯便可。
以上五種加密方式,有利有弊,有難有易,根據需求選擇就能夠了。
python開發等相關IT技術羣:887934385 分享技術 分享資料 交流問題