Python教程

python代码使用cython进行加密

本文主要是介绍python代码使用cython进行加密,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

python代码加密

  • 前言
  • 加密的多种方式
  • Cython加密
    • 步骤
    • 注意
  • 部署

前言

加密的多种方式

  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文件后,重复加密会报错,提示没有源文件。(不能重复加密)

部署

省略

这篇关于python代码使用cython进行加密的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!