多语言展示
当前在线:589今日阅读:195今日分享:41

0基础跟我学python 七、加密python代码

在正式踏入python的理论知识前,我想插入这样一篇,加密源代码的经验。为什么要加密源代码?python是个解释型语言,当你把源文件(也是脚本程序)直接拷贝给别人的时候,源代码是开放的。例如你把一个cgi.py拷贝给别人,那么别人只要cat或者vim打开就能完全看到源代码,对你的程序了如指掌。这时我们就要考虑到加密的问题了。
工具/原料

一台linux

生成pyc
1

我们先来看看加密后的效果。可以看到,我们用cat查看这个叫test.pyc的程序,除了注释。我们的代码都变成了一个我们看不懂的代码(非python代码)。或者说乱码。

2

我们试试这个加密后的文件是否可以运行?

3

加密方式有两种:第一,通过一个import导入模块的方式,调用py_compile来生成加密后的py文件第二,通过解释器加载模块的方式加密形式有两种:pyc文件:这是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。pyo文件:pyo也是优化后的py程序,针对嵌入式系统,把需要的模块编译成pyo文件可以减少容量。

4

我们先来看看第一种方式。我们先用它来生成pyc文件。通过导入py_compile内置模块来生成加密的python程序。在这里我们需要建立两个py程序,一个作为加密程序,另外一个作为被加密程序。(其实说把它编译成字节码会更适合,╮( ̄▽ ̄')╭)我们先来建立第一个程序。就叫p_compile.py吧(注意一点,我们的文件名不要和模块名相同,切记)。touch p_compile.py

5

建立第二个文件。就叫mypy.py吧。

6

vim打开p_compile.py。代码如下:#!/usr/bin/pythonimport py_compile#导入内置的py_compile模块py_compile.compile('mypy.py')

7

vim打开my.py调用print随便打印什么。print('hey,pyc');

8

改完运行权限后,我们直接来看看结果。先ls -l看看当前目录有什么文件。

9

./p_compile.py运行。让它去编译我们的mypy.py文件。然后ls -l看看有什么变化?

10

我们用vim和cat分别看看这个编译后的字节码文件。

11

运行这个字节码文件。python mypy.pyc这里注意一点,我们是不能直接./mypy.pyc的方式运行的,因为这是字节码文件,它没有解释器路径(因为这是个挂平台的字节码),如果这台linux,我们的python是在/usr/bin/python没错,可能在bsd上就不是这个路径,所以,pyc是没办法./直接运行的,要通过解释器调用运行。

12

还有一种办法可以生成pyc文件,就是通过python解释器加载模块的方式我们先rm -f mypy.pyc删除这个pyc文件。然后python -m py_compile mypy.py生成pyc文件。

13

我们直接python mypy.pyc试试看?

生成pyo
1

pyo目前没办法通过内置的py_compile模块生成,但是可以通过compile函数来实现(后面的经验会说这一点)我们通过参数-O(大写O,不是零),来生成pyo文件。但是要和pyc文件一起生成。我们先把pyc删掉。rm -f pyc我们只要python -O -m py_compile mypy.py即可生成pyc和pyo

2

再看看结果?注意的是,pyo也和pyc一样,只能打开python解释器直接解释运行,不能通过./*.py的方式。

注意事项

如果喜欢本经验,请关注我。可以把它分享给您的朋友,烦请点个投票点个收藏。谢谢,您的支持是我最大的动力。

推荐信息