别再裸奔了,你的项目代码安全吗,再不加密就out了

在工作中,有时候我们需要部署自己的Python应用 或进行私有化部署时,尤其现在都是通过docker镜像部署,我们并不希望别人能够看到自己的Python源程序。

 

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

加密过程中会产生很多多余文件,加密后可以删除,我这里用了脚本一步完成

加密流程

   1、项目文件加密

    2、将加密的文件移至对应目录下
    3、删除原文件和生成的附属文件夹

设备:Mac

项目:简单测试项目 

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

$ brew install gcc 
$ pip3 install cython

linux上安装 
$ sudo apt install python3-dev gcc
$ pip3 install cython

创建测试项目:

目录如下:

 

简单介绍文件:

入口函数main.py:

from origin import Hello
t = Hello()
t.say()

被加密的文件origin.py:

class Hello():

    def say(self):
        print("hello world !")

加密的文件setup.py:

dirPath = "origin.py"
# 1、文件加密
setup(ext_modules = cythonize([dirPath]))
print("加密完成")

进入项目下,执行加密文件setup.py: python3 setup.py build_ext

多了一个文件:origin.c 和 一个文件夹:build

build里就是我们加密后的文件,手动将build/lib下的对应文件替换掉源文件即可,对应的.c文件也可删除

注意:不同的系统产生的build的二级目录不同,但加密后的文件都是lib开头的目录下,都是以.so结尾

处理后的项目目录为:

我们发现原来的origin.py:被替换成了加密后的.so文件

 

测试项目是否还能正常运行:

项目加密完成!

一键完成

因为我们不可能通过加密项目,然后一步步移动加密文件,然后删除,再部署项目,那样会导致整个项目代码很乱,也不方便操作

加密文件也是Python代码肯定要用code完成整个过程了,

(加密 -- 源文件替换 -- 删除.c和其他附属文件)

dirPath = "origin.py"
filePath3 = "build/"

# 1、文件加密
setup(ext_modules = cythonize([dirPath]))
print("加密完成")

# 2、将加密的文件移至对应目录下
files_1 = os.listdir(filePath3)

for files_1_temp in files_1:
    if "lib" in files_1_temp:
        files_1 = files_1_temp
        print(files_1)

files_2 = os.listdir(filePath3 + files_1)[0]
so_file = filePath3 + files_1+"/" + files_2
print(so_file)

# 文件移动或拷贝
shutil.copy(so_file, "./")

# 3、删除原文件和生成的附属文件夹
files2 = os.listdir("./")
for file in files2:
    if file == dirPath or file.endswith(".c"):
        # 判断文件是否存在
        if (os.path.exists(file)):
            os.remove(file)
            print('移除后test 目录下有文件:%s' % file)
        else:
            print("要删除的文件不存在!")

#删除附属文件夹
try:
    shutil.rmtree(filePath3)
except Exception as ex:
    print("错误信息:"+str(ex))#提示:错误信息,目录不是空的

print("删除完成")
进入项目下,执行加密文件setup.py: python3 setup.py build_ext

Jenkins + Docker 部署

通过 Jenkins + Docker 部署的,那么就要在部署过程中进行加密处理

那么通过Docker部署需要注意点:

1、需要安装python3-dev,gcc,Cython

2、要先安装Cython, 才能执行加密代码

# 从拉取基础镜像 作为builder
FROM registry.cn-hangzhou.aliyuncs.com/ai_images/server-base2 AS builder

COPY . /app
WORKDIR /app
RUN rm -rf ./.git

# 注意这里也有builder 会大大减少镜像的大小且项目启动速度也会加快
FROM registry.cn-hangzhou.aliyuncs.com/ai_images/server-base2
COPY --from=builder /app/ /app

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

EXPOSE 5009
RUN pip3 install -r ./requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 执行加密文件
RUN python3 setup.py build_ext
CMD ["python3", "/app/main.py","run-server"]
小技巧分享:

docker部署时通过二次镜像处理,会大大的减少镜像的大小且加快项目启动

DuckChat 是一个安全的私有聊天软件,独立部署 / 消息加密 / 安装简单 / 免费提供App DuckChat产品特点 1. 独立部署,消息加密安全通道。 2. 支持客户端Web网页端,免费提供手机客户端App(App store / DuckChat官网下载)。 3. Linux / Windows / 虚拟空间 都可以部署。 4. 核心程序开源,永久免费。 5. 支持手机App网页程序扩展,自己用H5网页,嵌入到App中。 DuckChat安全的私有部署IM聊天软件 v1.1.4更新日志 新增:客服小程序 修复:站点默认好友删除无效 修复: 优化web端长链接  DuckChat是一款独立部署的聊天系统。 包含服务器程序源代码,以及社交浏览器客户端,服务器搭建完成后,用户可以通过电脑、APP访问你的站点。   功能特性: 完善的基础通讯功能 支持单人聊天、群聊 支持文字、图片、语音等多种类型的消息 支持扩展h5特殊消息、以及其他多种多媒体交互类型   卓越的访问速度和负载能力 支持集群扩展的模式,理论上支持无限制的用户同时使用 支持多种数据库对接系统,以适应不同用户量 支持高级VIP定制,为用户量超大的服务「量身定做」   安全性 自己搭建,安全可靠,消息不会泄露。 支持多重保密方案,解决中间人攻击、后台监控等多种消息泄露问题   小程序扩展以及界面灵活配置 支持小程序开发,以插件模式配置进客户端,丰富客户端业务。 管理后台可以配置软件的界面、业务菜单栏、特殊消息等等。 甚至可以设置小程序界面为主页,让业务内容更清晰明确。     安装方法 环境要求:建议使用php7.2版本,最低支持版本为php5.6。   Docker搭建步骤: 1、安装Docker 2、下载源码,并在终端(命令行程序)cd 到 duckchat.sh 所在目录。 3、启动/关闭程序  sudo sh duckchat.sh sudo sh duckchat.sh stop   Linux下搭建步骤: 1、搭建PHP Nginx服务,配置phpfpm、nginx,并启动成功。 2、从Github下载源代码,复制src目录下的所有内容,到网站根目录。 3、为根目录和所有子目录赋予权限。(执行命令:chmod -R 777 .)   Windows下搭建步骤: 1、下载 XAMPP 安装后服务。 2、找到 XAMPP 的网站根目录[xampp安装地址]/htdocs,删除原有的默认代码。 3、下载源代码,复制src目录下的内容到网站根目录 4、启动 XAMPP Control 管理平台,点击启动apache。 5、打开浏览器,访问localhost,程序部署安装完毕。   教程文档: http://duckchat.akaxin.com/wiki/   DuckChat升级方法 1、备份站点与数据 2、下载新版本代码,覆盖上传到原站点 3、使用电脑浏览器刷新页面,执行升级程序   DuckChat 截图 相关阅读 DuckChat 1.0.7发布,十分钟快速搭建聊天系统
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿三先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值