python代码使用cython进行加密

2023-11-05

前言

加密的多种方式

  1. 发布编译过的pyc文件
    缺点:很容易被反编译
  2. PyInstaller 是一个用来将 Python 程序打包成一个独立可执行软件包,支持 Windows、Linux 和 Mac OS X。
    缺点:不同系统需要不同的包。
  3. cython。可以防止反编译和破解
    缺点:可能需要完善不支持的部分代码。
  4. 修改字节码定义并且发布pyc:这样你的代码将无法在标准Python解释器/VM上运行,标准的反编译器也无法反编译你的程序。
    缺点:需要自带能够支持你私有字节码定义Python解释器/VM
  5. 对按标准字节码定义生成的pyc文件进行字节码混淆,混淆后的程序可以欺骗反编译器以及反汇编器,但仍然能够被Python解释器/VM正确执行。
  6. 源码混淆:源码混淆替换函数名,变量名为人眼难以正确处理的字符串。
    缺点: 逻辑层不变。只是加大了一点 阅读障碍。
pyobfuscate 代码混淆 

def my_fuction_to_test ( self , start_date , end_date ) :
  iiiii11iII1 = self . get_something ( start_date , end_date )
  O0o = [ ]
  for oO0 in iiiii11iII1 :
   if oO0 [ "isOpen" ] == 1 :
    IIIi1i1I = { }
    OOoOoo00oo = dt . strptime ( oO0 [ 'calendarDate' ] , '%Y-%m-%d' )
    IIIi1i1I [ 'day' ] = OOoOoo00oo . strftime ( '%Y%m%d' )
    IIIi1i1I [ 'week' ] = oO0 [ 'isWeekEnd' ]
    IIIi1i1I [ 'month' ] = oO0 [ 'isMonthEnd' ]
    IIIi1i1I [ 'weekday' ] = OOoOoo00oo . weekday ( )
    O0o . append ( IIIi1i1I )
  iiI11 = pd . DataFrame ( O0o )
  return iiI11

Cython加密

Cython 的主要目的是带来性能的提升,但是基于它的原理:将 .py/.pyx 编译为 .c 文件,再将 .c 文件编译为 .so(Unix) 或 .pyd(Windows),其带来的另一个好处就是难以破解。
不足:
步骤兼容性稍差,对于不同版本的操作系统,可能需要重新编译
虽然支持大多数 Python 代码,但如果一旦发现部分代码不支持,完善成本较高。

步骤

1、安装cython依赖

pip  install Cython==0.29.22

2、配置setup.py文件

APP_ID = 'xxx'
# 需要编译的目录
dir_paths = ['apps/configs',
             'account',
             'common',
             'component',
             'component/utils',
             'component/drf',
             'component/drf/mixins',
             'config'
             ]

files = [APP_ID + '/' + i + '/*.py' for i in dir_paths]

# 参数包含build_ext 说明是编译
if  'build_ext' in sys.argv:
    # 编译生成so文件
    setup(ext_modules = cythonize(files, exclude=['__init__.py']))
else:
    # 删除py和.c 文件
    for item in dir_paths:
        for dirpath, foldernames, filenames in os.walk(item):
            for file in filenames:
                if dirpath == item + '/migrations':
                    break
                if (file.endswith('.py') or file.endswith('.c') or file.endswith('.pyc')):
                    os.remove(dirpath + '/' + file)

3、执行

  1. 拷贝setup.py到项目同级,执行命令,进行编译。加密目录下会生成.c和.so文件
python setup.py build_ext --inplace
  1. 拷贝setup.py到工程内,执行命令,删除.c和.py源文件
python setup.py
  1. 删除‘pycache’文件夹和pyc文件,命令需要配置正确路径
find xx/hn_docs_center -name "__pycache__" |xargs rm -rf

注意

  1. 每个model类中都必须配置app_label属性
  2. linux上部署的话需要在linux环境进行编译。linux、mac和wins编译不通用
  3. 加密完成后删除py文件后,重复加密会报错,提示没有源文件。(不能重复加密)

部署

省略

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python代码使用cython进行加密 的相关文章

随机推荐

  • MySQL - 各种超时时间 - 学习与探究

    1 应用场景 主要用于学习与探究MySQL各种超时时间 应用在合适的场景下 2 学习 操作 1 文档阅读 https wen geekr dev chatgpt 官方文档 其他资料 2 整理输出 2 1 是什么 MySQL中有多个超时时间
  • java自动化测试语言高级之Object 类

    java自动化测试语言高级之Object 类 文章目录 java自动化测试语言高级之Object 类 Java Object 类 Java Object 类 Java Object 类是所有类的父类 也就是说 Java 的所有类都继承了 O
  • vue项目 高德地图实现区域多个标点并通过半径距离以此点绘制多个圆(circle),动态显示隐藏圆;实现根据经纬度获取中文地址,根据地址获取经纬度;地图控件显示隐藏

    最终效果 一 需求 最近公司有这样一个需求 指定一个区域根据一个距离测算需要开放多少个门店才能覆盖整个指定区域 暂不考虑人口密集 山区等因素 大概估算 因此稍微了解了一下 高德地图的API 记录一下常用高德地图进行定位 标点 自定义标点 测
  • 优美的小程序启动页(附源码)

    优美的小程序启动页 附源码 1 看效果 2 注意点 实现这一效果其实是很简单的 首先我们要把自己设置的启动页的路径写在app jon中 注意小程序默认第一个路径是小程序加载的开始页 其次我们的页面有时会出现这种情况 这是应为在x json文
  • Mysql 将逗号隔开的属性字段数据由列转行

    Mysql 将逗号隔开的属性字段转行为行数据 Mysql 将逗号隔开的属性字段转行为行数据 场景 在开发时 我们会根据需求进行数据库表的设计 有时我们在设计数据表时无法很好的符合三大范式 原因场景的复杂性 假如时时刻刻遵顼三大范式 会增加我
  • 搭建私有YUM仓库_及_内网镜像站

    搭建私有YUM仓库 及 内网镜像站 搭建私有YUM仓库 自己定制的rpm包 私有yum仓库环境系统版本 centos7 4 IP 192 168 1 47 最好能上公网 私有yum仓库服务端配置 第一 创建使用yum仓库存放路径 mkdir
  • 爱心循环java代码

    package 对阳子心动 public class aixindaima public static void main String args throws InterruptedException int count 0 for fl
  • 函数、对象在内存中存在形式

    一 php底层内存分区 php将内存分为5个区 堆区一般存对象 栈区一般存基本数据类型 普通变量 和函数 全局区存全局变量和静态变量 常量区存常量 代码区存代码 二 函数调用时栈区变化 这是一个简单的递归函数示例 当主函数调用counts函
  • 服务器IP装系统,服务器 安装系统 自动设置ip

    服务器 安装系统 自动设置ip 内容精选 换一换 在移动设备上正确安装APP后 就可以通过APP登录NetEco服务器 在裸金属服务器发放过程中 普通裸金属服务器的操作系统需要从云端下载 安装 下载过程会消耗较长时间 基于云硬盘的裸金属服务
  • python 画正弦曲线

    要画正弦曲线先设定一下x的取值范围 从0到2 要用到numpy模块 numpy pi 表示 numpy arange 0 2 0 01 从0到2 以0 01步进 令 x numpy arange 0 2 numpy pi 0 01 y nu
  • 进程、线程和协程的理解

    进程 线程和协程的理解 进程 线程和协程之间的关系和区别也困扰我一阵子了 最近有一些心得 写一下 进程拥有自己独立的堆和栈 既不共享堆 亦不共享栈 进程由操作系统调度 线程拥有自己独立的栈和共享的堆 共享堆 不共享栈 线程亦由操作系统调度
  • 模拟模态对话框的DIV

    最近项目中用到一个模拟模态对话框的DIV的实现 有两个层 下面的层是半透明的 将遮盖整个窗口 上面的层则用于用户输入信息 这里是一个简单的模仿 以下是页面代码 table tr td td tr table
  • unity3D游戏开发三之unity编辑器二

    unity3D游戏开发三之unity编辑器二 分类 unity3d开发 2014 04 06 12 03 264人阅读 评论 0 收藏 举报 unity3d 游戏开发 编辑器 对象 下面我们介绍下GameObject 游戏对象 物体 通过游
  • uniapp 使用uView框架 upload组件上传前压缩图片

    根据Uview官方文档所说 若是小程序和app项目 上传使用压缩图片 可以配置u upload组件的sizeType属性为 compress 但这对H5是无效的 在实际开发中 图片压缩上传经常是一个必要的需求 所以本篇文章主要讲的是在H5项
  • 算法 - leetcode 292 Nim Game

    算法 leetcode 292 Nim Game 一丶题目 你和你的朋友 两个人一起玩 Nim 游戏 桌子上有一堆石头 每次你们轮流拿掉 1 3 块石头 拿掉最后一块石头的人就是获胜者 你作为先手 你们是聪明人 每一步都是最优解 编写一个函
  • 初级算法(字符串篇):报数

    题目描述 The count and say sequence is the sequence of integers with the first five terms as following 1 11 21 1211 111221 1
  • windows:升级node版本

    目录 1 打开DOS窗口 然后输入 node v 回车 2 输入 where node 查看node安装位置 3 下载你想安装的node版本的msi程序 4 安装步骤3中下载的文件 然后安装位置选择步骤2中的位置 比如步骤2中我的位置是 C
  • 每个人都能制作的简易版QQ音乐(HTML+CSS+JQuery)

    自制系列二它来了 如果在制作过程中有如何问题你都可以私信我 我会答复你的 今天中秋节 首先祝大家中秋节快乐 因为没什么礼物送给大家 所以在这里给大家安利一份简易版QQ音乐的制作 过程很简单 每个人都能学会 下面将是制作步骤了 先建好目录如下
  • 未将对象引用设置到对象的实例--可能出现的问题总结

    一 网络上的一般说法 1 ViewState 对象为Null 2 DateSet 空 3 sql语句或Datebase的原因导致DataReader空 4 声明字符串变量时未赋空值就应用变量 5 未用new初始化对象 6 Session对象
  • python代码使用cython进行加密

    python代码加密 前言 加密的多种方式 Cython加密 步骤 注意 部署 前言 加密的多种方式 发布编译过的pyc文件 缺点 很容易被反编译 PyInstaller 是一个用来将 Python 程序打包成一个独立可执行软件包 支持 W