偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

介紹幾種 Python 加密源代碼的方法

開發(fā) 后端
源碼的保則是必須要做的一件事情。雖然很難,雖然不是十分完美,但是多增加一道門檻,也就多抵擋一些閑得蛋疼的人搞破解。

[[409658]]

 Python 語(yǔ)法簡(jiǎn)單,使用方便,我們可以使用它快速地編寫程序和構(gòu)建應(yīng)用。 在編寫好程序之后,我們必然要進(jìn)行程序的分發(fā)。

如果我們寫的是圖形界面程序,可能會(huì)打包成相應(yīng)操作系統(tǒng)平臺(tái)的二進(jìn)制運(yùn)行文件 (當(dāng)然也可能直接發(fā) Python 代碼給別人運(yùn)行)。

如果我們寫的是 Web 應(yīng)用程序,則需要部署在指定的服務(wù)器上 。

而這,就涉及到了 源碼保護(hù)的問(wèn)題 。我們不需要程序的使用者能夠看到程序的源碼。但是,Python 作為一門動(dòng)態(tài)語(yǔ)言和腳本語(yǔ)言,運(yùn)行通過(guò)它編寫的程序,并不需要進(jìn)行靜態(tài)編譯和打包的過(guò)程, 對(duì)其代碼進(jìn)行加密是一件很麻煩、復(fù)雜和困難的事情 。

如果構(gòu)建好的 Python 應(yīng)用程序只是我們內(nèi)部使用,或者部署在服務(wù)器上以 SaaS 化的形式供使用者使用,那么也根本無(wú)需考慮 Python 代碼加密和源碼泄露的問(wèn)題。

但是,如果我們編寫的程序是要進(jìn)行商業(yè)授權(quán)的呢?

源碼的保護(hù)則是必須要做的一件事情。

雖然很難,雖然不是十分完美,但是多增加一道門檻,也就多抵擋一些閑得蛋疼的人搞破解。

下面,介紹幾種常見(jiàn) Python 應(yīng)用程序的代碼加密方式,以供參考:

一、桌面圖形程序加密

通常情況下,我們使用 PyQt5、Tkinter、WxPython 等框架編寫的圖形程序會(huì)使用 PyInstaller 進(jìn)行打包,生成平臺(tái)的二進(jìn)制運(yùn)行文件,比如 Windows 下的 exe 文件。

不過(guò), 使用 PyInstaller 編譯打包出來(lái)的程序,很容易很反編譯回去 。

比如,使用 pyinstxtractor 這個(gè)工具,就能把 PyInstallers 編譯出來(lái)的 exe 還原回去;之后,再對(duì)還原出來(lái)的 pyc 文件進(jìn)行反編譯即可。

具體的使用方法,大家可以網(wǎng)上搜索,都有很多文章。

如何提高圖形程序打包出二進(jìn)制文件的安全性呢?

之前我們?cè)诮榻B PyQt5 程序打包時(shí),有提到過(guò)使用 Nuitka 這個(gè)工具來(lái)減少生成二進(jìn)制文件的大小。

其實(shí), Nuitka 會(huì)將 Python 程序轉(zhuǎn)化為 C 語(yǔ)言程序,然后再進(jìn)行編譯打包為二進(jìn)制文件 。眾所周知,反編譯 C 程序的難度是巨大的。以此,我們就極高地保障了圖形界面程序的源碼安全性。

二 、Web 應(yīng)用程序

對(duì)于 Python 編寫的 Web 應(yīng)用程序,我們一般直接將其部署在服務(wù)器上然后對(duì)外進(jìn)行服務(wù)。

但是如果是一個(gè)私有化部署的應(yīng)用程序,既需要部署在客戶的機(jī)器上,又不想客戶看到應(yīng)用程序的源碼。

這時(shí)候,可以考慮 將 Python 代碼文件編譯為 C 文件,然后再將 C 文件編譯為操作系統(tǒng)的動(dòng)態(tài)鏈接庫(kù)文件 (Linux 下的 .so 文件和 Windows 下的 .pyd 文件)。

以上步驟需要使用第三方庫(kù) cython,然后編寫一個(gè)setup.py文件用來(lái)指定需要處理的 Python 文件,例如:

  1. from distutils.core import setup 
  2. fromCython.Buildimport cythonize 
  3. setup(ext_modules = cythonize(["zmister.py"])) 

這樣,就可以把 Python 文件編譯為特定操作系統(tǒng)平臺(tái)的動(dòng)態(tài)鏈接庫(kù)文件了。

同時(shí),有一個(gè)第三方庫(kù) jmpy3 對(duì)上述流程進(jìn)行了優(yōu)化,支持單個(gè)文件和整個(gè)項(xiàng)目進(jìn)行編譯,使用起來(lái)更加友好:

需要注意的是,使用這種方式加密后的文件 需要使用生成時(shí)的 Python 版本 ,這也算是一個(gè)小缺點(diǎn)。但是這個(gè)缺點(diǎn)可以 通過(guò)打包為 Docker 鏡像的方式解決 掉。

三、通用加密

除了上述兩種方案,還有一個(gè)工具——PyArmor 能夠?qū)崿F(xiàn) Python 代碼的加密。

PyArmor 是一個(gè)用于加密和保護(hù) Python 腳本的工具。它能夠在運(yùn)行時(shí)刻保護(hù) Python腳本的二進(jìn)制代碼不被泄露,設(shè)置加密后 Python 源代碼的有效期限,綁 定加密后的Python源代碼到硬盤、網(wǎng)卡等硬件設(shè)備。它的保障機(jī)制主要包括:

  • 加密編譯后的代碼塊,保護(hù)模塊中的字符串和常量
  • 在腳本運(yùn)行時(shí)候動(dòng)態(tài)加密和解密每一個(gè)函數(shù)(代碼塊)的二進(jìn)制代碼
  • 代碼塊執(zhí)行完成之后清空堆棧局部變量
  • 通過(guò)授權(quán)文件限制加密后腳本的有效期和設(shè)備環(huán)境

除了對(duì) Python 代碼進(jìn)行加密,PyArmor 還能設(shè)置 Python 程序的許可方式,比如設(shè)置程序的使用期限、設(shè)置允許運(yùn)行的設(shè)備、擴(kuò)展其他認(rèn)證方式 等:

我們直接使用 pip 命令即可對(duì)其進(jìn)行安裝:

  1. pip install pyarmor 

然后,使用 obfuscate 選項(xiàng)就能對(duì)代碼進(jìn)行加密:

  1. pyarmor obfuscate foo.py 

使用 licenses 選項(xiàng)即可生成許可文件:

  1. pyarmor licenses \ 
  2. --expired "2018-12-31" \ 
  3. --bind-disk "100304PBN2081SF3NJ5T" \ 
  4. --bind-mac "70:f1:a1:23:f0:94" \ 
  5. --bind-ipv4 "202.10.2.52" \ 
  6. r001 

 使用 --with-license 參數(shù)即可指定許可文件:

  1. pyarmor obfuscate --with-license licenses/r001/license.lic foo.py 

使用 pack 選項(xiàng)即可打包腳本:

  1. pyarmor pack foo.py 

需要注意的是,pyarmor 是一個(gè)共享軟件,安裝之后處于試用模式,在試用模式下有一些限制,如果購(gòu)買的話,也不貴,298的價(jià)格還是很良心的。

四、最后

除了代碼加密,Python 社區(qū)內(nèi)的很多觀點(diǎn)也認(rèn)為,加密是徒勞的,任何加密都有可能被破解,有一個(gè)良好的 法律約束條款 可能是更好的選擇,而且如今的商業(yè)模式傾向于 靠服務(wù)收費(fèi) 而非產(chǎn)品收費(fèi)。

 

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2020-11-13 13:05:27

Java開發(fā)代碼

2010-03-19 16:51:53

Java Socket

2009-12-15 11:31:53

Ruby self

2011-06-16 10:48:33

session

2009-12-10 17:02:50

PHP站點(diǎn)性能

2015-08-26 17:38:47

Linux源代碼

2010-03-18 14:46:18

Java SynDem

2010-01-26 13:14:48

2009-12-17 11:14:50

Ruby on Rai

2011-07-08 15:11:03

JAVA

2009-03-11 11:32:10

JavaJava安全加密技術(shù)

2009-12-24 16:11:07

WPF圖像處理

2020-05-08 11:13:28

Python數(shù)據(jù)技術(shù)

2009-06-09 11:19:49

2009-12-09 13:54:42

PHP Zend加密文

2011-06-14 16:20:45

測(cè)試

2009-03-05 09:35:18

LinuxUbuntu截圖

2009-03-02 17:49:21

LinuxUbuntu輕松截圖

2023-12-13 13:28:00

Spring全局異常處理架構(gòu)

2011-07-14 14:15:40

ThreadLocal
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)