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

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

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

加密流程
项目文件加密
将加密的文件移至对应目录下
删除原文件和生成的附属文件夹

设备:Mac

项目:简单测试项目

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

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

创建测试项目:

目录如下:

aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" />

简单介绍文件:

入口函数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文件

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

aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" />

项目加密完成!

一键完成

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

加密文件也是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部署时通过二次镜像处理,会大大的减少镜像的大小且加快项目启动

别再裸奔了,你的项目代码安全吗,再不加密就out了的更多相关文章

  1. 记一次MongoDB裸奔

    导言 大意失荆州,裸奔的 MongoDB 被黑了.虽然并不是什么非常重要的数据,但也给自己敲响的一个警钟.虽然我们平时不容易接触到数据安全,但我们在开发,部署项目的时候,一定要养成良好的安全意识. 根 ...

  2. 裸奔着造房子——对政府禁止采购Win8系统的一些看法

    前段时间有消息称政府招标的项目将禁止使用Win8系统,原因是Win8系统的安全架构将有利于暴露敏感信息给微软,而微软的老子是美利坚,老子想要知道什么,儿子当然不敢不从.因此Win8也被打入冷宫,微软多 ...

  3. 跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)

    前言 撸码需谨慎,裸奔有风险.经常在一些技术交流群中了解到,还有很多小伙伴的项目中Api接口没有做任何安全机制验证,直接就裸奔了,对于一些临时项目或是个人小项目还好,其余的话,建议小伙伴们酌情考虑都加 ...

  4. S3C6410裸奔之旅——RVDS2.2编译、仿真、调试过程 LED流水灯---转的

    S3C6410裸奔之旅——RVDS2.2编译.仿真.调试过程 LED流水灯 (2012-10-13 23:56:30) 转载▼ 标签: s3c6410裸奔 ok6410 rvds2.2 rvds2.2 ...

  5. 网骗欺诈?网络裸奔?都是因为 HTTP?

    先跟大家讲个故事,我初恋是在初中时谈的,我的后桌的后桌.那个时候没有手机这类的沟通工具,上课交流有三宝,脚踢屁股.笔戳后背以及传纸条,当然我只能是那个屁股和后背,还不是能让初恋踢到的后背. 但是说实话 ...

  6. 裸奔的智能插座:博联Broadlink SP2/SP mini的分析、破解

    https://www.jianshu.com/p/028b10bc3dd1 智能设备的联动通常采用IFTTT的方式,但这种方式受限于官方软件提供的功能.想要自主地灵活控制,需要有官方SDK,或知道协 ...

  7. (转)裸奔的后果!一次ssh被篡改的入侵事件

    裸奔的后果!一次ssh被篡改的入侵事件 原文:http://blog.51cto.com/phenixikki/1546669 通常服务器安全问题在规模较小的公司常常被忽略,没有负责安全的专员,尤其是 ...

  8. 裸奔的支付X聊天,你还敢用吗?

    - 语音消息 使用HTTP明文传输,没有任何加密措施,使用域名为up-mayi.django.t.taobao.com,从报文中可以看出,语音消息是以文件形式在网络中传输的,下图为一次语音的发送传输过 ...

  9. PJzhang:如何在裸奔的年代找到一些遮羞布

    猫宁!!! 很久以前的一篇,搬过来. 我一直在“裸奔”,而且很久了,只是不太愿意承认. 想起了“皇帝的新装”,好奇何种经历和灵感让安徒生写出了如此精彩的故事. 一次百度了一个商品,不久接到了大规模电话 ...

随机推荐

  1. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  2. Nginx:fastcgi_param详解

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径 fastcgi_param QUERY_STRI ...

  3. Ubuntu16.04Apache负载均衡+集群

    mod_proxy ,主代理模块Apache模块用于重定向连接;它允许Apache充当底层应用程序服务器的网关.mod_proxy_http ,它增加了对代理HTTP连接的支持.mod_proxy_b ...

  4. 学习DB2之Linux环境下下载

    一 下载前的注册IBM地址:https://www-01.ibm.com/marketing/iwm/iwm/web/pick.do?source=swg-db2expressc&S_PKG= ...

  5. Mysql中如何查看慢查询以及查看线程

    一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...

  6. 前端 img标签显示 base64格式的 图片

    本文链接:https://blog.csdn.net/kukudehui/article/details/80409522在做项目的时候,我从后端返回了一个base64格式的图片文件,想把它渲染在前端 ...

  7. 目录窗口多选Multiple Select in Catalog Window or arccatalog

    目录窗口多选Multiple Select in Catalog Window or arccatalog 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#q ...

  8. 钉钉通知机器人与SpringBoot的集成

    Spring Boot Admin 集成自定义监控告警(2.0.1版本)------钉钉机器人 - yuancao24的博客 - CSDN博客https://blog.csdn.net/yuancao ...

  9. Springmvc & Report: FineReport vs BIRT vs Jasperreport

    Springmvc与jasperreport结合生成报表的一种方法 - OneThin的个人空间 - OSCHINAhttps://my.oschina.net/onethin/blog/14360 ...

  10. layui 提交验证以及field作用

    设置值时只需data.field.name(input中name属性)=1;即可赋值data.field.index_desc = layedit.getContent(index_desc); $. ...