最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)代碼加密的兩種方案詳解

 更新時(shí)間:2026年03月13日 08:52:38   作者:wgr_1009  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)代碼加密的兩種方案,主要是使用Pyarmor工具進(jìn)行加密和使用cython進(jìn)行加密,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

方案1:使用Pyarmor工具進(jìn)行加密

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

1、安裝

pip install pyarmor
# 驗(yàn)證是否安裝成功, 7.0 以下版本為穩(wěn)定版
pyarmor --version

2、加密過程

首先把源代碼編譯成代碼塊

char *filename = "foo.py";
char *source = read_file( filename );
PyCodeObject *co = Py_CompileString( source, "<frozen foo>", Py_file_input );

接著進(jìn)行如下處理

使用 try…finally 語句把代碼塊的代碼段 co_code 包裹起來

新添加一個(gè)頭部,對(duì)應(yīng)于 try 語句:

        LOAD_GLOBALS    N (__armor_enter__)     N = length of co_consts
        CALL_FUNCTION   0
        POP_TOP
        SETUP_FINALLY   X (jump to wrap footer) X = size of original byte code

接著是處理過的原始代碼段:

對(duì)于所有的絕對(duì)跳轉(zhuǎn)指令,操作數(shù)增加頭部字節(jié)數(shù)

加密修改過的所有指令代碼

追加一個(gè)尾部,對(duì)應(yīng)于 finally 塊:

        LOAD_GLOBALS    N + 1 (__armor_exit__)
        CALL_FUNCTION   0
        POP_TOP
        END_FINALLY

添加字符串名稱 __armor_enter, __armor_exit__ 到 co_consts

如果 co_stacksize 小于 4,那么設(shè)置為 4

在 co_flags 設(shè)置自定義的標(biāo)志位 CO_OBFUSCAED (0x80000000)

按照上面的方式遞歸修改 co_consts 中的所有類型為代碼塊的常量

然后把改裝后的代碼塊轉(zhuǎn)換成為字符串,把字符串進(jìn)行加密,保護(hù)其中的常量和字符串

char *string_code = marshal.dumps( co );
char *obfuscated_code = obfuscate_algorithm( string_code  );

最后生成加密后的腳本,寫入到磁盤文件

sprintf( buf, "__pyarmor__(__name__, __file__, b'%s')", obfuscated_code );
save_file( "dist/foo.py", buf );

3、加密模式

PyArmor 提供多種加密模式,以滿足安全和性能方面的平衡。通常情況下,默認(rèn) 的加密模式能夠滿足絕大多數(shù)的需要,一般情況下也不需要對(duì)加密模式有詳細(xì) 的了解。僅當(dāng)對(duì)性能有特別的要求或者默認(rèn)加密模式無法滿足需求的時(shí)候,才需 要改變加密模式,這就需要理解 PyArmor 的不同加密模式。

默認(rèn)加密模式

加密腳本命令

pyarmor obfuscate xx.py

超級(jí)模式

目前支持版本

  • python 2.7
  • python 3.7

加密腳本命令

pyarmor obfuscate --advanced 2 xx.py

高級(jí)模式

加密腳本命令

pyarmor obfuscate --advanced 1 xx.py

其他加密模式(不常用)

  • 代碼加密模式
  • 代碼包裹模式
  • 模塊加密模式
  • 約束模式

4、使用pyarmor

1.加密腳本

pyarmor [command] [options]

常用命令:pyarmor obfuscate main.py

pyarmor會(huì)加密main.py文件和相同目錄下的所有*.py文件,并創(chuàng)建輸出子目錄dist, 生成加密的主腳本main,py、相同目錄下的**.py、生成的運(yùn)行加密腳本所需的全部輔助文件保存到dis輸出目錄

2.發(fā)布加密腳本

發(fā)布加密腳本給客戶只需要把輸出路徑dist的所有文件拷貝過去即可

3.生成新的許可文件(可選)

使用命令 licenses為加密腳本生成新的許可文件license.lic,加密腳本的同時(shí)會(huì)在輸出目錄下面生成一個(gè)默認(rèn)許可文件,dist/licnese.lic,需要生成新的許可文件,并覆蓋默認(rèn)許可文件

例如:

pyarmor licneses --expired 2019 -01-01 code-001

執(zhí)行該命令會(huì)生成一個(gè)帶有效期的認(rèn)證文件,這樣超過指定日期后加密腳本就無法正常運(yùn)行了

4.綁定加密腳本到固定機(jī)器上(可選)

如果想綁定加密腳本到固定機(jī)器上,首先在該機(jī)器上面運(yùn)行下面的命令獲取硬件信息

pyarmor hdinfo

然后生成綁定到固定機(jī)器的許可文件

pyarmor licenses --bind-disk “100304PBN2081SF3NJ5T” --bind-mac “20:c1:d2:2f:a0:96” code-002,

同樣,覆蓋默認(rèn)的許可證,這樣加密腳本就只能在指定機(jī)器上運(yùn)行

5、優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 使用方便,加密腳本較快且能一鍵加密,操作較簡(jiǎn)單
  • 多種加密模式,滿足常規(guī)絕大多數(shù)的加密要求
  • 有文檔支持,對(duì)于常見的錯(cuò)誤異??梢酝ㄟ^查閱官方文檔解決
  • 支持其他功能,例如,檢查加密腳本的性能、交叉保護(hù)機(jī)制
  • 可以設(shè)置加密文件有效期及綁定在固定機(jī)器上

缺點(diǎn)

  • 每個(gè)大的版本的改動(dòng)比較大,安裝時(shí)需要查看官方文檔選用合適的版本進(jìn)行安裝
  • 個(gè)別版本交叉發(fā)布時(shí)腳本無法運(yùn)行,具體查看官方文檔
  • 安裝python版本時(shí)需要開啟靜態(tài)庫的共享進(jìn)行安裝,否則會(huì)無法加密文件
  • 運(yùn)行加密文件時(shí)的python版需要和加密時(shí)的python版本一致
  • pyarmor安裝的默認(rèn)是試用版,對(duì)加密文件的大小、模塊的函數(shù)個(gè)數(shù)等都有限制,用于商業(yè)時(shí)需要單獨(dú)購買

方案2:使用cython進(jìn)行加密

1、安裝

pip install cython

2、加密過程

  • 利用Cython將.py文件編譯為.c文件
  • 將.c文件編譯為為.so或.pyd文件,linux系統(tǒng)為.so文件,Windows系統(tǒng)為.pyd文件

3、使用Cython

創(chuàng)建setup.py加密指定的python文件

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(["main.py"], language_level=3)

4、簡(jiǎn)化Cython加密過程

jmpy3為python的一個(gè)第三方庫,能夠?qū)ython代碼一鍵加密為.so或者.pyd文件,支持單個(gè)文件加密,整個(gè)項(xiàng)目加密,加密后會(huì)在項(xiàng)目目錄中增加一個(gè)dist的文件夾,把源文件替換為加密后的文件即可正常運(yùn)行

安裝

pip install jmpy3

切換到項(xiàng)目所在目錄,執(zhí)行以下命令

jmpy -i 項(xiàng)目名稱

發(fā)布加密腳本

同樣加密后會(huì)在項(xiàng)目目錄中增加一個(gè)dist的文件夾,把源文件替換為加密后的文件即可正常運(yùn)行

5、優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 通過jmpy3可以實(shí)現(xiàn)一鍵加密,加密較為方便
  • 加密后代碼運(yùn)行效率有所提升
  • 生成.so或.pyd文件難以破解

缺點(diǎn)

  • 兼容性稍差,對(duì)于不同的版本的操作系統(tǒng),需要重新編譯
  • 運(yùn)行加密文件時(shí)的python版需要和加密時(shí)的python版本一致
  • 沒有官方文檔,使用加密后的代碼出錯(cuò)后,需要自己排查解決錯(cuò)誤

到此這篇關(guān)于Python實(shí)現(xiàn)代碼加密的兩種方案詳解的文章就介紹到這了,更多相關(guān)Python代碼加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中asyncio模塊的深入講解

    Python中asyncio模塊的深入講解

    這篇文章主要給大家介紹了關(guān)于Python中asyncio模塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python使用SQLAlchemy模塊實(shí)現(xiàn)操作數(shù)據(jù)庫

    Python使用SQLAlchemy模塊實(shí)現(xiàn)操作數(shù)據(jù)庫

    SQLAlchemy 是用Python編程語言開發(fā)的一個(gè)開源項(xiàng)目,它提供了SQL工具包和ORM對(duì)象關(guān)系映射工具,使用SQLAlchemy可以實(shí)現(xiàn)高效和高性能的數(shù)據(jù)庫訪問,下面我們就來學(xué)習(xí)一下SQLAlchemy模塊的具體應(yīng)用吧
    2023-11-11
  • Python進(jìn)階學(xué)習(xí)之特殊方法實(shí)例詳析

    Python進(jìn)階學(xué)習(xí)之特殊方法實(shí)例詳析

    一般說來,特殊的方法都被用來模仿某個(gè)行為。下面這篇文章主要給大家介紹了關(guān)于Python進(jìn)階學(xué)習(xí)之特殊方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-12-12
  • Python3.x爬蟲下載網(wǎng)頁圖片的實(shí)例講解

    Python3.x爬蟲下載網(wǎng)頁圖片的實(shí)例講解

    今天小編就為大家分享一篇Python3.x爬蟲下載網(wǎng)頁圖片的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python讀寫LMDB文件的方法

    python讀寫LMDB文件的方法

    這篇文章主要為大家詳細(xì)介紹了python讀寫LMDB文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python控制windows系統(tǒng)音量實(shí)現(xiàn)實(shí)例

    Python控制windows系統(tǒng)音量實(shí)現(xiàn)實(shí)例

    這篇文章主要介紹了Python控制windows系統(tǒng)音量實(shí)現(xiàn)實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • Python賦值邏輯的實(shí)現(xiàn)

    Python賦值邏輯的實(shí)現(xiàn)

    本文主要介紹了 Python賦值邏輯的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python RC4加密操作示例【測(cè)試可用】

    python RC4加密操作示例【測(cè)試可用】

    這篇文章主要介紹了python RC4加密操作,結(jié)合實(shí)例形式分析了python實(shí)現(xiàn)RC4加密功能的具體操作步驟與相關(guān)問題解決方法,需要的朋友可以參考下
    2019-09-09
  • Python?selenium安裝+Microsoft?Edge驅(qū)動(dòng)器下載配置流程(最新推薦)

    Python?selenium安裝+Microsoft?Edge驅(qū)動(dòng)器下載配置流程(最新推薦)

    本文介紹了如何在Python自動(dòng)化Web瀏覽器背景下配置MicrosoftEdge瀏覽器驅(qū)動(dòng),主要內(nèi)容包括查看瀏覽器版本、下載對(duì)應(yīng)驅(qū)動(dòng)、配置環(huán)境以及安裝和驗(yàn)證Selenium庫,感興趣的朋友一起看看吧
    2025-02-02
  • 對(duì)于Python異常處理慎用“except:pass”建議

    對(duì)于Python異常處理慎用“except:pass”建議

    這篇文章主要介紹了對(duì)于Python異常處理方法的建議,摘選自StackOverflow上的熱門問題的回答,闡述了except:pass的使用時(shí)需要注意的地方,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

宿迁市| 宣武区| 遂昌县| 泸州市| 台江县| 宁阳县| 洛宁县| 江孜县| 彰化县| 腾冲县| 西峡县| 皮山县| 德令哈市| 靖西县| 德惠市| 丹东市| 东宁县| 吉木萨尔县| 烟台市| 资阳市| 武强县| 吴桥县| 灌阳县| 高清| 开阳县| 自治县| 乃东县| 易门县| 永寿县| 岳池县| 凌源市| 义马市| 隆化县| 东台市| 北海市| 论坛| 河津市| 延吉市| 登封市| 馆陶县| 古交市|