python代码加密
来源:互联网 发布:xp怎么查找网络打印机 编辑:程序博客网 时间:2024/05/16 14:10
在公司里做东西的时候有这样一个需求:需要将python代码部署到客户的机器上,但是不希望客户能够看到源代码。(高精尖呐,哪能随便给人看,O(∩_∩)O哈!)
代码加密
大概整理了以下几种方法:
- 编译成pyc文件
- 使用py2exe将python代码转成window下执行的exe文件
- 关键代码部分使用c或者c++写,然后在python中调用
- 用C写一个license,进行license验证
作为一门解释型的语言,加密的难度超级大。下面来简单分析上面的解决方案:
- 编译成pyc文件几乎跟pyc没有区别,保护力度太低
- 要是在linux机器上就没法使用,而且这种exe文件也可以被破解的
- 核心代码部分是计算密集型,用的是pandas,numpy等库,用c重写,简直不可能,工作量太大。
- 没搞过,不知道………
看来上面的解决方案都是不行的,在stackoverflow上对这个问题也进行了详细的讨论,用我蹩脚的英文来翻译(意译)一下得票率最高的:
“有什么方法来解决这个问题吗?(加密的问题)”没有。任何保护都可以被逆向工程破解。就连DVD机的固件都可以被破解,尽管法律判定其为非法,但是AACS加密密钥还是泄露出来。
因为没有技术的方法可以阻止你的客户看你的代码,你必须用传统的商业方法。
1. 许可证,合约,条款,条件。只要用户签订了这些东西,及时用户可以看见代码,也会有法律约束(不过此建议在中国目前貌似不顶用)
2. 提供巨大的价值。如果你的东西非常好,而且价格很合理,那么用户很难拒绝——没必要浪费时间和金钱去搞逆向工程啥的,因为逆向工程是很费银子的。让你的产品有足够的性价比。
3. 经常性的升级和增加新的功能,使得逆向工程不那么好使。当下一个版本破坏了逆向工程,那么以前的破解就没有意义了。
4. 定制化生产,为不同的客户提供不同的产品。(貌似代价有点高啊)
5. 使用有时间限制的许可证,这会给你带来不好的名声,但是会保证你的软件会停止工作
6. 设计为web service.
代码混淆
既然加密不是一个好方法,那要还是不死心,那就做一个简单的混淆算了,虽然只能”防君子,不防小人“。但是不能就这样把代码暴露出来。
这里推荐一个找了好久的东西: pyobfuscate这个东西在window7中的cmd中貌似总是混淆失败,无奈用了MINGW32,居然搞定了。官方的资料有这样的介绍:
pyobfuscate有几种转化代码的方式,有些可逆,有些不可逆。
- 移除注释和文档 ( 不可逆)
- 改变缩进(可逆)
- 在tokens之间加入空格(一定程度上可逆)
- 重命名函数,类,和变量(不可逆)
- 在空白行中加入无效的代码
我没有选择混淆函数名和类名,因为其他地方还要调用呢。下面是我混淆的结果,还挺好看的:
def my_fuction_to_test ( self , start_date , end_date ) : iiiii11iII1 = self . get_something ( start_date , end_date ) O0o = [ ] for oO0 in iiiii11iII1 : if oO0 [ "isOpen" ] == 1 : IIIi1i1I = { } OOoOoo00oo = dt . strptime ( oO0 [ 'calendarDate' ] , '%Y-%m-%d' ) IIIi1i1I [ 'day' ] = OOoOoo00oo . strftime ( '%Y%m%d' ) IIIi1i1I [ 'week' ] = oO0 [ 'isWeekEnd' ] IIIi1i1I [ 'month' ] = oO0 [ 'isMonthEnd' ] IIIi1i1I [ 'weekday' ] = OOoOoo00oo . weekday ( ) O0o . append ( IIIi1i1I ) iiI11 = pd . DataFrame ( O0o ) return iiI11
- Python代码加密
- python代码加密
- python代码加密
- Python代码加密 源码保护--pyc文件'字节码'
- 正方教务系统加密密码解密之python代码
- 凯撒加密与解密及其python代码的实现
- 加密代码
- 代码加密
- 加密代码
- Python 加密
- python加密
- 一段用Python语言的Ctypes模块调用系统api函数写的rsa加密代码
- java和python的SHA-1形式RSA加密方式代码互通
- javascript 代码加密解密代码
- 网页加密JS代码
- DES加密解密代码
- HTML代码的加密
- MD5加密代码
- 树莓派通过物联网照顾宠物龟
- 一个实习生的最高境界
- 【JAVA学习】10.内部类
- 排序算法总结之快速排序 Quick Sort
- 《netty权威指南》2.5 4中IO的对比
- python代码加密
- 在使用Git push或pull代码的时候,总是要输入用户名和密码的问题
- android.app.SuperNotCalledException: Activity {} did not call through to super.onDestory() 解决办法
- 八大排序
- Ubuntu15.04单机/伪分布式安装配置Hadoop与Hive试验机
- OpenTLD 未完成 - 虎头
- (java)利用BASE64编码和解码图片文件
- 项目中用到的Android代码整理
- android的样式(style)与主题(theme)