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

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

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

方案1:使用Pyarmor工具進行加密

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

1、安裝

pip install pyarmor
# 驗證是否安裝成功, 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 );

接著進行如下處理

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

新添加一個頭部,對應于 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

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

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

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

追加一個尾部,對應于 finally 塊:

        LOAD_GLOBALS    N + 1 (__armor_exit__)
        CALL_FUNCTION   0
        POP_TOP
        END_FINALLY

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

如果 co_stacksize 小于 4,那么設置為 4

在 co_flags 設置自定義的標志位 CO_OBFUSCAED (0x80000000)

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

然后把改裝后的代碼塊轉換成為字符串,把字符串進行加密,保護其中的常量和字符串

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 提供多種加密模式,以滿足安全和性能方面的平衡。通常情況下,默認 的加密模式能夠滿足絕大多數(shù)的需要,一般情況下也不需要對加密模式有詳細 的了解。僅當對性能有特別的要求或者默認加密模式無法滿足需求的時候,才需 要改變加密模式,這就需要理解 PyArmor 的不同加密模式。

默認加密模式

加密腳本命令

pyarmor obfuscate xx.py

超級模式

目前支持版本

  • python 2.7
  • python 3.7

加密腳本命令

pyarmor obfuscate --advanced 2 xx.py

高級模式

加密腳本命令

pyarmor obfuscate --advanced 1 xx.py

其他加密模式(不常用)

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

4、使用pyarmor

1.加密腳本

pyarmor [command] [options]

常用命令:pyarmor obfuscate main.py

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

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

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

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

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

例如:

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

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

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

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

pyarmor hdinfo

然后生成綁定到固定機器的許可文件

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

同樣,覆蓋默認的許可證,這樣加密腳本就只能在指定機器上運行

5、優(yōu)缺點

優(yōu)點

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

缺點

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

方案2:使用cython進行加密

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、簡化Cython加密過程

jmpy3為python的一個第三方庫,能夠將python代碼一鍵加密為.so或者.pyd文件,支持單個文件加密,整個項目加密,加密后會在項目目錄中增加一個dist的文件夾,把源文件替換為加密后的文件即可正常運行

安裝

pip install jmpy3

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

jmpy -i 項目名稱

發(fā)布加密腳本

同樣加密后會在項目目錄中增加一個dist的文件夾,把源文件替換為加密后的文件即可正常運行

5、優(yōu)缺點

優(yōu)點

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

缺點

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

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

相關文章

  • Python中asyncio模塊的深入講解

    Python中asyncio模塊的深入講解

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

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

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

    Python進階學習之特殊方法實例詳析

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

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

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

    python讀寫LMDB文件的方法

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

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

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

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

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

    python RC4加密操作示例【測試可用】

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

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

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

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

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

最新評論

沅江市| 兰西县| 普安县| 常德市| 黄龙县| 长岭县| 营口市| 买车| 巍山| 孟村| 江北区| 富顺县| 汶上县| 牡丹江市| 锦州市| 拜城县| 永仁县| 梧州市| 甘南县| 兰州市| 浠水县| 五原县| 田林县| 壶关县| 高密市| 深州市| 修水县| 东乡族自治县| 根河市| 湘潭市| 伊宁市| 中方县| 敦煌市| 遂川县| 永仁县| 昌黎县| 杭锦后旗| 贵州省| 镇坪县| 观塘区| 印江|