python代碼的幾種常見加密方式分享
Python的文件類型介紹:
- .py python的源代碼文件
- .pyc Python源代碼import后,編譯生成的字節(jié)碼
- .pyo Python源代碼編譯優(yōu)化生成的字節(jié)碼。pyo比pyc并沒有優(yōu)化多少,只是去掉了斷言
- .pyd Python的動態(tài)鏈接庫(Windows平臺)
- .so
常見的源碼保護手段有如下幾種:
1.發(fā)行.pyc文件
pyc文件是py文件經(jīng)過編譯后生成的二進制文件,python提供py_compile內(nèi)置模塊把py文件編譯為pyc文件,得到的.pyc文件可以直接運行python xxx.pyc
.pyc只能在特定版本的解釋器上運行
1.1 編譯加密
mian.py
def spread(arg):
ret = []
for i in arg:
if isinstance(i, list):
ret.extend(i)
else:
ret.append(i)
return ret
def deep_flatten(lst):
result = []
result.extend(
spread(list(map(lambda x: deep_flatten(x) if type(x) == list else x, lst))))
return result
print(deep_flatten([1, [2], [[3], 4], 5]))編譯指令:
python -m py_compile main.pypython -m compileall main.py批量

1.2 是否可逆
- pyc加密現(xiàn)成的反編譯工具,可以反編譯得到源代碼.
- 使用uncompyle庫進行反編譯
可逆
測試:
pip install uncompyle uncompyle6 main.cpython-38.pyc > main.py

1.3是否影響模塊調(diào)用
不影響使用
# coding=utf-8 # 調(diào)用模塊main from main import deep_flatten print(deep_flatten([1, [2], [[3], 4], 5]))

2.代碼混淆

- 1.1 降低代碼可讀性
- 1.2 不影響模塊之間調(diào)用
3.生成exe可執(zhí)行文件
使用py2exe
py2exe是將Python代碼轉(zhuǎn)換為 Windows 平臺上的可執(zhí)行文件的工具,只能在windos上使用,原理是譯為 .pyc 文件,加上一些動態(tài)連接依賴文件,一起打包成一個可執(zhí)行文件。
pip install py2exe
需要編寫setup.py文件:
#!/usr/bin/env python from distutils.core import setup import py2exe setup(console=[f'E:\_Py_Project\leanPy\work\代碼加密\main1.py'])
然后執(zhí)行 python setup.py py2exe


- 1.1 是否可逆
不可逆
- 1.2 是否影響模塊調(diào)用
不影響
4…py文件轉(zhuǎn)化為.so文件
生成使用 Cython
它的原理:將 .py/.pyx 編譯為 .c文件,再將 .c文件編譯為 .so(Unix) 或 .pyd(Windows)
pip install Cython
setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(name='main1',
ext_modules=cythonize(f'E:\_Py_Project\leanPy\work\代碼加密\main1.py'))python setup.py build_ext

在windos下生成.pyd文件

測試 .pyd文件,把mian1.py刪除,把.pyd文件移動到.py原來目錄下

在linux下生成.so文件

測試:

- 1.1 是否可逆:
不可逆
- 1.2 是否影響模塊調(diào)用
不影響
5.附加運行輔助包文件
pip install pyarmor==6.8.1
pyarmor obfuscate main.py同目錄下所有的 *.py文件都會被加密
方式一:高級加密模式,需要引導(dǎo)代碼

方式二:超級加密模式
超級模式只需要一個運行輔助文件,沒有了所謂的引導(dǎo)代碼
pyarmor obfuscate --advanced 2 .\main1.py

方式三: 虛擬加密模式
高級 + 虛擬
pyarmor obfuscate --advanced 3 .\main1.py

超級 + 虛擬
pyarmor obfuscate --advanced 4 .\main1.py

輔助文件和編譯文件

幾種加密方式對比:

到此這篇關(guān)于python代碼的幾種常見加密方式分享的文章就介紹到這了,更多相關(guān)python加密方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python字符串切割:str.split()與re.split()的對比分析
今天小編就為大家分享一篇python字符串切割:str.split()與re.split()的對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python numpy庫linspace相同間隔采樣的實現(xiàn)
這篇文章主要介紹了python numpy庫linspace相同間隔采樣的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python3實現(xiàn)抓取javascript動態(tài)生成的html網(wǎng)頁功能示例
這篇文章主要介紹了Python3實現(xiàn)抓取javascript動態(tài)生成的html網(wǎng)頁功能,結(jié)合實例形式分析了Python3使用selenium庫針對javascript動態(tài)生成的HTML網(wǎng)頁元素進行抓取的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
Python文件讀取read()?readline()?readlines()函數(shù)使用場景技巧示例
這篇文章主要介紹了Python文件讀取read() readline()及readlines()函數(shù)使用場景技巧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08

