保护 Python 脚本的工具,能够加密 Python 脚本,保护运行时刻的 Python 代码不被泄露,设置加密脚本的有效期限,绑定加密脚本到硬盘、网卡等硬件设备。
PyArmor 使用动态代码生成和交叉保护机制来保证加密脚本的安全性。
最简单的安装方式:pip install pyarmor
查看版本号:pyarmor --version
,成功在终端看到版本号即安装成功。
命令 obfuscate 用来加密脚本。最常用的一种情况是切换到脚本app.py所在的路径,然后执行。
加密:pyarmor obfuscate app.py
,PyArmor 会加密 app.py 和相同目录下面的所有 *.py 文件到dist文件夹中。
运行加密代码:cd dist
之后,python app.py
即可。
5行code写Flask web demo
app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return 'hello world!'
if __name__ == '__main__':
app.run()
执行:python app.py
,其用web,Running on http://127.0.0.1:5000/
现在开始加密:在app.py目录下执行:pyarmor obfuscate app.py
会在相同目录下生成dist目录,
运行加密代码:cd dist
之后,python app.py
即可(发布加密脚本给客户只需要把输出路径 dist 的所有文件拷贝过去即可)。
默认情况下,只有和主脚本相同目录的其他 *.py 会被同时加密。如果想递归加密 子目录下的所有 *.py 文件,使用下面的命令:
pyarmor obfuscate --recursive app.py
注解:运行加密脚本不需要安装 PyArmor,没有必要在运行环境里面安装 PyArmor
运行加密脚本必须有一个认证文件 license.lic 。一般在加密脚本的同时,会自动生成一个缺省的认证文件。但是这个缺省的认证文件允许加密脚本运行在任何机器并且永不过期。
如果需要设置加密脚本的使用期限或者限制脚本在特定的机器使用,需要生成新的许可文件, 并使用新的许可文件加密脚本。
3.1、执行pyarmor licenses --expired 2022-04-28 r001
这条命令 PyArmor 会生成一个带有效期的认证文件:
3.2、然后,使用新生成的许可文件加密脚本:pyarmor obfuscate --with-license licenses/r001/license.lic app.py
这样,使用下面的命令运行脚本在2019年1月1日之后就会报错:cd dist/
python app.py
3.3、如果想绑定加密脚本到固定机器上,首先在该机器上面运行下面的命令获取硬件信息:pyarmor hdinfo
3.4、然后在生成绑定到固定机器的许可文件: 硬盘信息(如果一台机器上有多个硬盘,那么 pyarmor 只检查默认的硬盘,也就是命令 hdinfo 打印出来的默认硬盘)pyarmor licenses --bind-disk "100304PBN2081SF3NJ5T" --bind-mac "20:c1:d2:2f:a0:96" r002
同样,使用这个许可文件加密脚本,加密脚本就只能在指定机器上运行:pyarmor obfuscate --with-license licenses/code-002/license.lic app.py