Python越来越热门了,2022年1月编程语言排行榜上挤进第一。

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

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

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

一、发布成pyc文件

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

二、代码混淆

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

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

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

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

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

三、打包成exe文件

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

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

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

四、Cython加密

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

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

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

五、修改python解释器

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

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

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

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

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

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

转自:https://blog.csdn.net/m0_59236602/article/details/122704211

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

  1. pca算法python代码_三种方法实现PCA算法(Python)

    主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...

  2. 在终端执行 Python 代码的 6 种方法,原来还能这样!

    来自 | Python猫  编译 | 豌豆花下猫 原作 | BRETT CANNON 为了我们推出的 VS Code 的 Python 插件[1],我写了一个简单的脚本来生成变更日志[2](类似于To ...

  3. 优化Python代码的4种方法

    介绍 作为数据科学家,编写优化的Python代码非常非常重要.杂乱,效率低下的代码即浪费你的时间甚至浪费你项目的钱.经验丰富的数据科学家和专业人员都知道,当我们与客户合作时,杂乱的代码是不可接受的. ...

  4. python画图-python画图的两种方法

    python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 1 安装turtle Python2安装命令:pip install turtule Python3 ...

  5. Blurry Box加密技术使用的7种方法

    Blurry Box加密技术包括七种方法,这七种方法结合起来,大大增加了破解难度.使得即使重新开发出一套新的软件,使用的时间和人力成本大大小于破解Blurry Box并逆向工程的成本.以下我们将说明B ...

  6. Python文本处理几种方法

    Python文本处理几种方法 方法一:readline函数 #-*- coding: UTF-8 -*- f = open("D:\pythontest\splm_ugslmd.log&qu ...

  7. 优化JS代码的34种方法(上)

    1. 含有多个条件的if语句 //longhand if(x === 'abc' || x === 'def' || x === 'ghi' || x == 'jkl'){//logic }//sho ...

  8. Pycharm中运行Python代码的几种方式

    Pycharm中运行Python代码的几种方式 在pycharm中的Python代码运行会出现各种奇葩的问题,比如,密码输入时不显示或没有提示,给我们带来一些麻烦,下面介绍几种代码运行的几种方式: 一 ...

  9. 写出漂亮代码的七种方法

    首先我想说明我本文阐述的是纯粹从美学的角度来写出代码,而非技术.逻辑等.以下为写出漂亮代码的七种方法: 1.尽快结束 if 语句 例如下面这个JavaScript语句,看起来就很恐怖:  functi ...

最新文章

  1. 泛型java 代码讲解_Java泛型详解
  2. 用Java API实现HDFS操作(三)问题汇总
  3. Mybatis报错 TooManyResultsException
  4. 工业镜头选型计算公式_工业冷水机组制冷量的计算公式是什么?
  5. 【JS】使用变量作为object的key-方法汇总
  6. Hibernate-Criteria
  7. windows内核对象
  8. 【git】从零开始在git上部署自己的免费生日祝福网页
  9. php管理后台,后台管理主页面 admin.php
  10. mysql 存储微信表情
  11. java前后端分离解决session,解决前后端分离开发sessionId不一致问题
  12. rk356x-Android 刷机
  13. win10桌面快捷方式变白,解决方式
  14. antv g6对接后台数据_AntV - G6
  15. HDMI EDID timing详细解析
  16. 合同相似可逆等价矩阵的关系及性质_矩阵的合同,等价与相似的联系与区别.doc...
  17. Office 2021 简体中文 正式版 零售版 32位和64位 官方镜像下载合集
  18. [iOS]监控屏幕旋转
  19. RT_thread邮箱的使用
  20. 计算机程序是通过专利保护,《专利审查指南》修改后计算机程序的专利保护研究.doc...

热门文章

  1. C#已知两点(线段),求互相垂直平分两点(线段)。
  2. 在 Vue 项目中使用 ECharts(菜鸟)
  3. Java排序算法汇总
  4. 2023年Android黑科技保活方案,应用永生,拒绝强制杀死 最高适配Android 13 小米 华为 Oppo vivo 等最新机型 拒绝强杀 开机自启动 附demo apk 附研究资料
  5. 国家开放大学《国际经济法》第三章 国际货物运输法 边学边练
  6. Hive分析窗口函数
  7. 如何在Unity中实现震动反馈效果
  8. 一步一步,手把手带你用最简单的方法,在linux上安装anaconda
  9. 计算机专业课观后感,计算机基础知识读后感
  10. visual studio code注释快捷键怎么用?