V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
1419co1in
V2EX  ›  Python

Python 代码的加密问题

  •  
  •   1419co1in · 2019-11-29 13:57:20 +08:00 · 7362 次点击
    这是一个创建于 1831 天前的主题,其中的信息可能已经有所发展或是发生改变。

    团队开发了一个 Web 系统,后端用的是 Python/Django,现在想把它卖给客户,但是领导要求代码加密(不能看见源码),不让直接把源码部署在阿里云上或者客户的主机上,怕源码泄漏被二次贩卖或者修改授权。

    如何说服领导或者有什么办法加密代码?

    29 条回复    2020-12-21 23:03:27 +08:00
    linlance
        1
    linlance  
       2019-11-29 13:59:03 +08:00
    好像没啥办法吧。。。听听其他大牛怎么说。

    这种按照法律,版权不是就是归甲方么?
    你们是干活的。。。。干活的不是乙方么?
    woshifyz
        2
    woshifyz  
       2019-11-29 14:01:01 +08:00
    这个是个老问题了,没啥特别完美的办法,找些关键地方,用 cython 重写下吧
    qile1
        3
    qile1  
       2019-11-29 14:02:51 +08:00 via Android
    dack 那个直接做成那样的发布可以不,更新就更新容器
    whoosy
        4
    whoosy  
       2019-11-29 14:06:20 +08:00
    google 去搜 Cpython 编译 python 代码
    vakara
        5
    vakara  
       2019-11-29 14:06:56 +08:00 via Android
    用 pyinstaller
    1419co1in
        6
    1419co1in  
    OP
       2019-11-29 14:10:51 +08:00 via iPhone
    @linlance 可能不想卖代码,想用定期授权的方式
    catcalse
        7
    catcalse  
       2019-11-29 14:13:33 +08:00
    pyd
    Hanggi
        8
    Hanggi  
       2019-11-29 14:13:33 +08:00
    这个是这样,一种是你们提供后期的服务,这种情况下你们可以全权负责维护等工作,当然这样成本太高。
    如果把程序卖给客户,而客户对代码不可见,且后期无法做任何修改,那么维护和更新谁来做呢?
    1419co1in
        9
    1419co1in  
    OP
       2019-11-29 14:17:04 +08:00 via iPhone
    @vakara 试过,可能对 Django 兼容性不行,各种 import 错误,后来放弃了
    wangyzj
        10
    wangyzj  
       2019-11-29 14:22:01 +08:00
    cython
    pypy
    pyinstaller
    实际上原理都差不多
    1419co1in
        11
    1419co1in  
    OP
       2019-11-29 14:22:17 +08:00 via iPhone
    @qile1 你说的是 docker 吗,docker 镜像和容器里的东西可以直接拿到的
    1419co1in
        12
    1419co1in  
    OP
       2019-11-29 14:25:07 +08:00 via iPhone
    @woshifyz 看来这能用这种方法了
    keakon
        13
    keakon  
       2019-11-29 14:26:59 +08:00
    我是用 cython 编译所有模块,main.py 里只 import 和调用 run()。
    wuwukai007
        14
    wuwukai007  
       2019-11-29 14:34:08 +08:00
    一个小 demo,转成 pyc,放在项目的相同目录下,
    https://gist.github.com/tosmart01/a048fc56ff967f7e8a1f173a514f73b2
    nyanyh
        15
    nyanyh  
       2019-11-29 14:40:45 +08:00
    自己修改编译个 python 解释器,修改下字节码对应的指令
    但想破解的话肯定是能弄出来的,关键代码用 C 写吧
    CallMeReznov
        16
    CallMeReznov  
       2019-11-29 14:40:53 +08:00
    @vakara #5 我昨天次啊把我不小心删掉的脚本用 exe 反编译回来


    不过可以试试用 pyinstaller 编译后在加一层壳
    如果不是专业队,应该是不会从网上随便找的教程里把你的东西反编译出来了
    CallMeReznov
        17
    CallMeReznov  
       2019-11-29 14:41:35 +08:00
    @1419co1in #9 把包直接复制到工程文件夹下面好像就可以了
    agegcn
        18
    agegcn  
       2019-11-29 14:44:27 +08:00
    cython 编译几个核心模块,包括授权的
    CEBBCAT
        19
    CEBBCAT  
       2019-11-29 16:02:59 +08:00   ❤️ 1
    这个问题已经有人问过了呀
    [Python 代码不能加密?]( https://www.v2ex.com/t/348602)
    [一般 Python 服务部署在公有云服务器上,如何做代码保护?]( https://www.v2ex.com/t/403957)
    提问前记得搜索喔
    imn1
        20
    imn1  
       2019-11-29 16:10:07 +08:00
    我给的建议是:
    整体加密不实际
    把一些核心算法、关键业务模块,转为 C/C++打包的 dll/so,由 python ctype 调用,这样可能更实际一些
    io123
        21
    io123  
       2019-11-29 16:11:10 +08:00 via Android
    用 cython 编译加密
    windows:编译成.pyd
    linux:编译成.so
    ungrown
        22
    ungrown  
       2019-11-29 16:11:25 +08:00 via Android
    @woshifyz 纯 python 代码可以直接用 cython 编译成二进制库,只不过无法享受到静态类型带来的速度优化罢了
    crawl3r
        23
    crawl3r  
       2019-11-29 16:30:25 +08:00
    最简单的方法是卖服务器或者虚拟机镜像,设置脚本开机启动,然后不给登录账号密码。这样他们只能用但看不到源码。
    qile1
        24
    qile1  
       2019-11-29 19:53:31 +08:00 via Android
    要不你编译为 pyc,然后写个 py 代码,在 pyc 文件前面插入一些二进制文件,运行时跳过这些二进制字符运行?
    0x5f
        25
    0x5f  
       2019-11-29 20:27:54 +08:00
    上次好像看到一个老哥说的是代码跑起来之后把代码删了
    EurekaSeven
        26
    EurekaSeven  
       2019-11-29 21:11:51 +08:00
    @0x5f 这个挺狠。。。话说以前我做外包的时候老板就是让我们搞这种,我们顶多做个 pyc 罢了。。
    HuberyPang
        27
    HuberyPang  
       2019-11-30 09:32:14 +08:00
    https://github.com/ArvinMei/py2so github star 的一个项目 把 python 代码打包成.so 不过这个打包环境和部署环境要一样 。我们的项目也是 django 的 把核心代码加密 不影响项项目运行。这个是项目是之前作者 python2 版本写的,自己修改一下就能用。
    zepc007
        28
    zepc007  
       2019-12-17 16:53:50 +08:00
    @0x5f 这个牛逼,哈哈哈 xswl
    ruanimal
        29
    ruanimal  
       2020-12-21 23:03:27 +08:00
    @linlance 2000G
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1354 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:43 · PVG 07:43 · LAX 15:43 · JFK 18:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.