使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用

本文涉及的产品
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,分割抠图1万点
简介: 本文介绍了在Linux系统(Ubuntu 18.04)下将Python源代码(`.py文件`)加密为`.so文件`的方法。首先安装必要的工具如`python3-dev`、`gcc`和`Cython`。然后通过`setup.py`脚本使用Cython将`.py文件`转化为`.so文件`,从而实现源代码的加密保护。文中详细描述了从编写源代码到生成及调用`.so文件`的具体步骤。此方法相较于转化为`.pyc文件`提供了更高的安全性。

常用的python加密方式

  • 第一种加密Python源代码的方式,是将.py文件转化为.pyc文件,但这种加密方式很容易被反编译,因此实用性并不高。

  • 第二种加密Python源代码的方式,是将.py文件转化为.so文件,这样加密的可靠性非常高,无法被被人破解,也就很好地保护了源代码。

本文以Linux系统(Ubuntu 18.04)为例,讲解如何将自己的Python程序(.py文件)加密为.so文件

1 准备环境

1、我们需要在Ubuntu系统中安装一些准备工具,包括python3-devgccCython,其中Cython为Python的第三方模块。安装的命令如下:

$ sudo apt install python3-dev gcc
$ pip3 install cython

2、代码文件准备如下:

(base) shl@zhihui-mint:~/Disk2/3_proj$ tree CodeEncryption/
CodeEncryption/
├── setup.py  # 把源码.py文件生成.so文件
├── so_test.py  # 调用生成的.so文件
└── test.py   # 要加密的源码文件

0 directories, 3 files
(base) shl@zhihui-mint:~/Disk2/3_proj$

2 调用Cython库包把python的.py文件生成.so文件

先说一下大致流程:

  • 1)写源码.py文件,我的源码写到test.py

  • 2)把源码 .py文件生成.so文件,使用上面的setup.py

  • 3)调用生成.so文件,效果和调用源码是一样的,相当于只能调用接口,但是并看不到源码的中的内容

下面说明具体操作:

2.1 写源码文件

源码文件为:test.py

import datetime

class Today():
    def get_time(self):
        print(datetime.datetime.now())

    def say(self):
        print("hello from SHL!")

我在源码中定义了:

  • 一个Today类
  • 两个类方法:
    • get_time()方法:获取当前时间
    • say()方法:打印输出一段字符

2.2 调用源码接口

so_test.py中写的是调用源码的接口,此时是从.py的源码中直接调用的python代码!

1、so_test.py调用接口代码:

(base) shl@zhihui-mint:~/Disk2/3_proj/CodeEncryption$ python so_test.py 
2021-08-14 17:35:04.143138
hello from SHL!
(base) shl@zhihui-mint:~/Disk2/3_proj/CodeEncryption$

因为在执行python so_test.py的时候,在so_test.py文件中导入了from test import Today,就会把test.py模块先生成一个编译的.pyc文件,目的就是在下次调用的时候加速,你可以删除,没有啥影响!
image.png

2.3 调用Cython库把.py源码生成.so文件

1、使用setup.py脚本把源码test.py生成.so文件setup.py中定义内容:

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize(["test.py"]))

2、生成.so文件

python3 setup.py build_ext

image.png

生成之后的文件目录结构:

image.png

可以看到,生成了.so文件,同时还生成了.c的源码文件,以及.o的中间代码文件,所以这个本质是把python代码转换为了C代码,然后使用gcc工具进行编译!

3、把源码删除,然后通过so_test.py接口调用.so文件,先把.so文件移到当前目录:

image.png

可以发现,此时依然可以通过.so文件对test.py源码中定义的代码进行调用,但是我们并不知道源码中具体的实现方式,因此实现了对.py源码文件的加密!

然后你就可以把源码删除,其他没有用的文件也删除,然后只告诉别人.so文件和调用接口,这样保护了自己的源码不被被人看到!你也可以以这种方式售卖自己的代码,后面优化更新源码还可以持续挣钱!

目录
相关文章
|
5天前
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【9月更文挑战第9天】随着数字化时代的到来,信息安全问题日益凸显。本文将介绍如何使用Python结合AES与RSA两种加密算法,构建强大的加密工具。AES以其高效性和强安全性著称,适用于大量数据的快速加密;RSA作为非对称加密算法,在加密小量数据及实现数字签名方面表现卓越。通过整合两者,可以构建既安全又灵活的加密系统。首先,需要安装pycryptodome库。接着,实现AES加密与解密功能,最后利用RSA加密AES密钥,确保其安全传输。这种设计不仅提高了数据传输效率,还增强了密钥交换的安全性,为敏感数据提供坚实保护。
133 43
|
1天前
|
数据采集 网络协议 API
HTTP协议大揭秘!Python requests库实战,让网络请求变得简单高效
【9月更文挑战第13天】在数字化时代,互联网成为信息传输的核心平台,HTTP协议作为基石,定义了客户端与服务器间的数据传输规则。直接处理HTTP请求复杂繁琐,但Python的`requests`库提供了一个简洁强大的接口,简化了这一过程。HTTP协议采用请求与响应模式,无状态且结构化设计,使其能灵活处理各种数据交换。
25 8
|
2天前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
15 8
|
4天前
|
Java 数据安全/隐私保护 Python
Python案例分享:如何实现文件的解压缩
Python案例分享:如何实现文件的解压缩
29 8
|
3天前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
15 5
|
4天前
|
存储 缓存 安全
Python案例分享:如何实现文件的上传下载
Python案例分享:如何实现文件的上传下载
30 6
|
5天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
26 7
|
4天前
|
安全 算法 数据安全/隐私保护
深度揭秘!Python加密技术的背后,AES与RSA如何守护你的数据安全
【9月更文挑战第10天】随着数字化时代的到来,数据安全成为企业和个人面临的重大挑战。Python 作为功能强大的编程语言,在数据加密领域扮演着重要角色。AES 和 RSA 是两种主流加密算法,分别以对称和非对称加密方式保障数据安全。AES(Advanced Encryption Standard)因其高效性和安全性,在数据加密中广泛应用;而 RSA 则利用公钥和私钥机制,在密钥交换和数字签名方面表现卓越。
18 3
|
3天前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
11 1
|
6天前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
21 2