美文网首页数析python学习交流Python-资料
别再裸奔了,你的项目代码安全吗,再不加密就out了

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

作者: Python数据分析实战 | 来源:发表于2019-11-26 10:06 被阅读0次

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

image

加密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

创建测试项目:

目录如下:

image

简单介绍文件:

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

image

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

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

image

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

处理后的项目目录为:

image

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

image

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

image

项目加密完成!

一键完成

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

加密文件也是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

image

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

相关文章

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

    在工作中,有时候我们需要部署自己的Python应用 或进行私有化部署时,尤其现在都是通过docker镜像部署,我们...

  • 再不主动你就out了!

    这是我冲动之下写的一篇,其目的只是为了来提醒自己要主动,否则后悔就来不及了。于此莫名想到一句话“拿出你追异性的疯狂...

  • 再不看,你就out了

    当你还在家里拿着手机刷着淘宝和微信,用支付宝和微信支付购买那些网上代购或者国内经销商手中的外国货时,国际市场已经开...

  • 再不创业你就OUT了。

    今日头条今天的热题就是关于追梦之说。每个人心中都有一份憧憬,一份似乎触手可得又得不到的梦想。但无论怎么样的处境,若...

  • 再不学,就OUT了!

    教育系统组织党员干部参加“不忘初心,牢记使命”素质提升主题教育培训,我们书记近期胃病复发,不能前行,推荐让...

  • 再不成长就out了!

    今天听了社群的小伙伴的分享,真的是受益良多。越来越有才的人更趋向年轻化,可想而知自己年轻的时候都是怎么过来的。想想...

  • 再不懂区块链,你就OUT了!

    认识一个从未见过的新事物,重要的是弄清楚它的来龙去脉,知其出身,方能知其所以然。 区块链(blockchain)思...

  • 再不学习,你就真的out了!

    2016就过半了,你的目标达半了吗?你答应自己的事情完成了吗? 然而在这将近半年的时间里,我逢人必问:你有没有什么...

  • 再不学会链接,你就out了!

    最近,一直在研究视频号,老师们反复强调一个词,就叫“链接”,未来谁拥有更强的链接能力,谁有更多的商业机会,谁将拥有...

  • 再不了解区块链你就OUT了?

    “本文由币乎(bihu.com )优质内容计划支持” 无论你在什么行业,想必这两天都能在朋友圈里看到关于区块链的各...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/cafewctx.html