Python越来越热门了,2019年3月TIOBE编程语言排行榜上,Python更是罕见的击败了“霸榜三巨头”之一的C++,挤进前三。

Python优点很多,比如简单易学,代码量少,能做的事很多等等,和其他语言一样,Pyhton也有一些不可掩盖的缺点,版本不兼容,运行效率不高等等。

其中一个缺点,让不少开发者头疼不已,由于Python解释器开源的关系,导致Python代码无法加密,代码的安全性得不到保障。

当然,想要加密Python代码,也并非无解。最常见的加密方式有4种,还有1种独特的加密方式。

1

Python解释器在执行代码的过程中,会首先生成.pyc文件,然后再解释执行.pyc中的内容,当然,解释器也能直接执行.pyc文件。

.pyc文件是一个二进制的文件,是不具备可读性的。

假如我们发到客户环境时,是.pyc文件,而不是.py,那么是不是就可以保护我们的Python代码?

想要做到这一点,并不难。Python标准库就提供了一个名叫compileall的库,使用它就可以做到。

执行如下命令,即可将目录下的所有.py文件编译成.pyc文件:

python -m compileall 然后删除 目录下所有 .py 文件就可以了。

$ find -name '*.py' -type f -print -exec rm {} ;

这一方法,可以加密我们的Python代码,胜过代码裸在外面。尴尬的是,因为Python解释器的兼容较差,有些版本并不能运行.pyc文件。而且已经有现成的反编译工具,可以直接破解。

比如python-uncompyle6(「链接」),只要执行以下命令,就可以搞定。

$ uncompyle6 *compiled-python-file-pyc-or-pyo*

关于怎么快速学python,可以加下小编的python学习群:611+530+101,不管你是小白还是大牛,小编我都欢迎,不定期分享干货

每天晚上20:00都会开直播给大家分享python学习知识和路线方法,群里会不定期更新最新的教程和学习方法,大家都是学习python的,或是转行,或是大学生,还有工作中想提升自己能力的,如果你是正在学习python的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实

2

代码混淆,也是一种常见的“加密”方式,严格意义上说,这一方法并不是加密,而是上代码的可读性变差。比如删除注释,添加毫无意义的注释,添加无效代码,对变量、函数、类进行重命名等。

内容不可读,代码就受到了保护。

代码混淆的工具很多,一个比较好用的混淆库是pyobfuscate(GitHub - astrand/pyobfuscate: pyobfuscate)。这个库可以对类、函数进行重命名,并且插入无关的代码,甚至自动加空格等等。

这一方法很简单,也提高了破解的门槛。但由于代码结构未发生变化,字节码也能获取,破解难度也不高。

一般而言,使用这一方式较为简单,实用。

3

如果有一款工具,可以将Python脚本打包成在某一平台的可执行文件,最终我们发行的,是一份打包完成的二进制文件,那么程序就更难被破解了?

py2exe(FrontPage - py2exe.orgFrontPage - py2exe.org)就是一款很好的打包工具,可以将Python脚本打包成可在Windows上运行的文件。

这一方式的优点是进一步提高了破解门槛。遗憾的是,你只能在windows上运行它。

4

Python运行速度慢何解?用Cython就可以带来性能的提升。实际上,Cython也可以用来加密Python代码。

Cython的原理是,将.py编译为.c文件,再将.c文件编译为.so或者.pyd,这样一来,文件就变得难以破解了。

这样做的好处是,Python代码很难被破解,缺点是有时候,Cython可能不支持一小部分代码,完善起来就比较麻烦了。

5

最后一种方法,做得比较绝。

由于Python是解释型语言,因此在发行Python程序的时候,就必须包含一个Python解释器,如果我们修改这个解释器,代码不就被保护起来了吗?

如果我们能对最原始的Python代码进行加密,加密后的代码被发行后。哪怕被别人看到了,但因为不晓得算法是怎样的,就破解不了了。

这是因为Python解释器本身是一个二进制文件,自然也就无法获得关键性的数据,进而保护了源码。

虽然这一方法最为安全,可操作难度较高。你必须掌握基本的加解密算法,还要探究Python执行代码的方式,从而了解到从什么地方进行加解密。最后禁用字节码,以防通过.pyc反编译即可。

以上五种加密方式,有利有弊,有难有易,根据需求选择就可以了。

5种方法,加密你的Python代码 !相关推荐

  1. 面经|缺失值填补的7种方法(使用场景+Python代码)

    新专栏<数据挖掘(分析)面经> 第一篇:缺失值处理方法 对于从事数据相关工作的小伙伴,面试的时候经常会被问到如何进行缺失值/异常值的处理,本文来梳理一下填补缺失值的7种方法. 示例数据 本 ...

  2. 11 种方法教你用 Python 高效下载资源

    1.使用requests 你可以使用requests模块从一个URL下载文件. 考虑以下代码: 你只需使用requests模块的get方法获取URL,并将结果存储到一个名为"myfile&q ...

  3. python字符串成熟编码_python字符串转公式两种方法获取网页编码python版

    在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...

  4. python获取屏幕文字_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)...

    前言: 今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家! Python获取电脑截图有多种方式,具体如下 ...

  5. 5 获取窗口位置_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)

    前言: 今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家! Python获取电脑截图有多种方式,具体如下 ...

  6. 如何加密你的 Python 代码 —— 转

    前言 去年11月在PyCon China 2018 杭州站分享了 Python 源码加密,讲述了如何通过修改 Python 解释器达到加解密 Python 代码的目的.然而因为笔者拖延症发作,一直没有 ...

  7. python元素定位的八种方法_selenium webdriver基于Python系列之八种元素定位方法

    1.id.name.class name.tag name.link text.partial link text.xpath.css selector在 Python 语言中对应的定位方法如下: f ...

  8. 5 种方法教你用Python玩转histogram直方图

    直方图是一个可以快速展示数据概率分布的工具,直观易于理解,并深受数据爱好者的喜爱.大家平时可能见到最多就是 matplotlib,seaborn 等高级封装的库包,类似以下这样的绘图. 本篇博主将要总 ...

  9. 【剑指offer 07】用迭代和递归两种方法重构二叉树(python实现)

    本文讲解一个经典的面试题,使用 python 通过迭代和递归两种方法重构二叉树. 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字 ...

  10. python代码解读软件_5种带你轻松分析Python代码的软件库

    [51CTO.com快译]通常,人们会使用两种速度来衡量某种编程语言的优劣,即:开发速度和执行速度.对于Python而言,大家往往受益的是它能够快速地编写代码,而忽略了它是否能够快速地运行,并及时完成 ...

最新文章

  1. linux下后台执行shell脚本
  2. Hadoop Intellij IDEA 建demo
  3. Android中的ViewPager2
  4. statsmodels 笔记 STL
  5. 【新星计划】MATLAB绘制图形
  6. DL之YoloV2:Yolo V2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  7. JVM解惑:消失的异常堆栈,log中打印异常堆栈为空
  8. echarts怎么保存图片到剪切板上_在电脑上怎么批量给图片编号以及怎么自动记录记事本txt文档时间...
  9. Tomcat 配置支持APR
  10. NetBeans 6.9 发布后选版 1 已经可用
  11. 名词解释 JDK JRE JVM
  12. bmp转yuv格式的视频
  13. 死锁的处理策略——预防死锁
  14. JAVA API 1.8版本文档下载( 百度网盘 )
  15. 报Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7的错误
  16. python读txt文件-python读取文本文件数据
  17. android sqlite 示例,Android SQLite数据库操作示例
  18. Fibonacci Sum(二项式求和)
  19. np.arange()和 range()的用法及区别
  20. 《ISLR》学习笔记 —— Bagging、随机森林、Boosting

热门文章

  1. mysql的pdb文件在哪里_pdb是什么文件?pdb数据库文件怎么打开?
  2. 金融数据安全分类分级解决方案
  3. 计算机基础知识2003,计算机基础知识PPT2003练习题及答案(DOC)
  4. 微软雅黑的字体设置css,css如何设置字体为微软雅黑
  5. kx驱动中的DSP设置
  6. matlab 粒子群应用,粒子群算法程序应用
  7. WINDOWS XP 桌面主题的安装制作
  8. vb 运行错误429 mysql_运行时错误429 ActiveX部件不能创建对象的终极解决方法
  9. linux 怎么在pe下安装驱动程序,【教程】再谈“万能驱动7在PE下安装驱动”功能...
  10. 设置linux开机自动运行某条命令或程序和安装jdk(jar)