【pyarmor】代码加密
项目需要,要对python代码加密,网上有很多方法,也可以使用python库——pyarmor。
参考
- 官网:PyArmor - 加密 Python 脚本
- 简书博客:PyArmor简单使用
- PyArmor 文档:PyArmor 的安全性
概述
保护 Python 脚本的工具,能够加密 Python 脚本,保护运行时刻的 Python 代码不被泄露,设置加密脚本的有效期限,绑定加密脚本到硬盘、网卡等硬件设备。
PyArmor 使用动态代码生成和交叉保护机制来保证加密脚本的安全性。
无缝替换
经过 PyArmor 加密后的 Python 脚本也是一个正常的 Python 脚本,只需要将一个模块 pytransform.py 和几个辅助文件加入到原来的代码里面,就可以把原来的 Python 脚本全部替换成为加密脚本,按照以前的方式使用和运行这些加密脚本。
动态加密
PyArmor 不仅仅能够加密 Python 脚本,即便在脚本被解释执行的运行过程中,一旦函数(代码块)执行完成,就会被重新加密,从更深层次保证了 Python 脚本的安全性。
PyArmor 使用分片式技术来保护 Python 脚本。所谓分片保护,就是单独加密 每一个函数,在运行脚本的时候,只有当前调用的函数被解密,其他函数都没有 解密。而一旦函数执行完成,就又会重新加密,这是 PyArmor 的特点之一。
PyArmor 的核心代码使用 c 来编写,所有的加密和解密算法都在动态链接库中实现。首先 _pytransform 自身会使用 JIT 技术,即动态生成代码的方式 来保护自己,加密后的 Python 脚本由动态库 _pytransform 来保护,反过来, 在加密的 Python 的脚本里面,也会来校验动态库,确保其没有进行任何修改。这就是交叉保护的原理,Python 代码和 c 代码相互进行校验和保护,大大提高了安全性。
为了提高安全性,PyArmor 会对其中加密的算法进行不定期的更新,这样,使用新版本加密的脚本会使用完全不同于以往的算法,以保证加密脚本的安全行。
设置不同的许可方式
设置使用期限:PyArmor 可以为加密的脚本设置使用期限,过期之后加密的 Python 脚本就无法在继续运行。
设置允许运行的设备:PyArmor 可以绑定加密 Python 脚本到硬盘序列号、网卡的 Mac 地址、IP 地址等。
扩展其他认证方式:加密后的脚本对用户来说就是黑盒子,所以可以在 Python 脚本里面添加任意的认证方式。
使用
最简单的安装方式:pip install pyarmor
查看版本号:pyarmor --version
,成功在终端看到版本号即安装成功。
命令 obfuscate 用来加密脚本。最常用的一种情况是切换到脚本main.py所在的路径,然后执行。
加密:pyarmor obfuscate main.py
,PyArmor 会加密 main.py 和相同目录下面的所有 *.py 文件到dist文件夹中。
运行加密代码:cd dist
之后,python main.py
即可。
tips
加密和使用加密代码的环境要保持一致(python版本,pyarmor版本)。