Pyconcrete是一个强大的Python脚本加密工具,它能够将你的
.py
文件加密成.pye
文件,并在导入时自动解密执行。这有效地保护了你的Python代码,防止未授权访问和反编译。本文将深入探讨Pyconcrete的功能、使用方法、安装步骤以及构建过程中的注意事项。
Pyconcrete的工作原理
Pyconcrete的核心机制是将你的Python脚本加密成.pye
文件,并利用一个名为_pyconcrete.pyd
(Windows) 或 _pyconcrete.so
(Linux/macOS) 的动态链接库进行解密。这个动态链接库包含了加密解密的密钥,这些密钥被巧妙地隐藏在二进制代码中,难以直接查看。
当你的脚本尝试导入一个模块时,Pyconcrete的导入钩子会优先查找.pye
文件。如果找到,它会调用_pyconcrete.pyd
/.so来解密.pye
文件,并将解密后的内容(相当于.pyc
字节码)执行。整个过程对用户来说是透明的,无需手动解密。目前Pyconcrete仅支持AES 128位加密。
安装Pyconcrete
安装Pyconcrete需要设置环境变量PYCONCRETE_PASSPHRASE
,该变量用于生成加密密钥。同一密码将生成相同的密钥。安装过程会将pyconcrete.pth
添加到你的site-packages
目录,以便自动导入pyconcrete
。
使用pip安装:
PYCONCRETE_PASSPHRASE=<你的密码> pip install pyconcrete
对于旧版本的pip,可以使用以下命令:
pip install pyconcrete --egg --install-option="--passphrase=<你的密码>"
如果使用egg方式安装,卸载时需要手动删除pyconcrete.pth
文件。
你也可以从GitHub下载源码进行安装:
git clone <pyconcrete repo> <pyconcrete dir>
cd <pyconcrete dir>
python setup.py install
Pyconcrete的使用方法
Pyconcrete 提供两种加密模式:完全加密和部分加密。
完全加密: 将所有.py
文件转换为.pye
文件。
pyconcrete-admin.py compile --source=<你的Python脚本或目录> --pye
执行完全加密后,原始的.py
和.pyc
文件可以删除或备份。运行加密后的脚本需要使用 pyconcrete <你的.pye文件>
命令。
部分加密 (Pyconcrete 作为库): 将Pyconcrete作为库集成到你的项目中。你需要下载源码并使用setup.py
安装到你的项目目录。推荐的项目结构如下:
main.py # 导入pyconcrete和你的库
pyconcrete/* # Pyconcrete库文件
src/*.pye # 加密的库文件
在main.py
中导入pyconcrete
,你的库文件则以.pye
形式存在。
测试与文档
Pyconcrete 提供了本地测试和Docker环境测试。你可以运行./pyconcrete-admin.py test
进行本地测试,或者运行./bin/run-test.sh
进行Docker测试。文档方面,需要确保setuptools版本不低于24.0。
总结
Pyconcrete为Python开发者提供了一种简单有效的方式来保护他们的代码。它易于使用,功能强大,并且支持跨平台构建。虽然它目前只支持AES 128位加密,但其核心功能已经足以满足大部分Python脚本的保护需求。需要注意的是,任何加密方法都不能保证绝对安全,选择合适的加密强度和配合其他安全措施才能最大限度地保护你的代码。这个库最高支持Python 3.10,且发行版推出较慢。
项目地址:https://github.com/Falldog/pyconcrete