Document

Django项目中所有.py 文件加密

1:如下是加密方法利用python的编译包将Py文件 与pyc 文件之间相互转换,

   这种方式不太安全, 反编译成本太低

 

 1 import os
 2 
 3 
 4 class EncryptionProject:
 5 
 6     def __init__(self, file_path, file_type):
 7         self.filepath = file_path
 8         # 文件类型
 9         self.filetype = file_type
10 
11     def read_project(self):
12         # 文件所在路径
13         filepath = os.getcwd() + self.filepath
14         encry_list = []
15         for dirpath, dirnames, files in os.walk(filepath):
16             if len(files) > 0:
17                 for i in files:
18                     if len(i) > 0:
19                         if i.split(".")[1] == self.filetype:
20                             encry_list.append(dirpath + "\\" + i)
21             else:
22                 if len(files) > 0:
23                     if files.split(".")[1] == self.filetype:
24                         encry_list.append(dirpath + "\\" + files)
25         return encry_list
26 
27     # 批量将 文件夹py 文件编译为pyc 文件
28     def py_pyc(self):
29         import py_compile
30         encry_list = self.read_project()
31         for i in encry_list:
32             py_compile.compile(i)
33         return "加密成功"
34 
35     # 批量将 文件夹pyc 文件编译为py 文件
36     def pyc_py(self):
37         import uncompyle6
38         encry_list = self.read_project()
39         for i in encry_list:
40             uncompyle6.decompile_file(i)
41         return "反编译成功"
42 
43     # 批量将 文件夹py 文件编译为.c 文件
44     def py_c(self):
45         from distutils.core import setup
46         from Cython.Build import cythonize
47         encry_list = self.read_project()
48         for i in encry_list:
49             setup(ext_modules=cythonize([i]))
50         return "加密成功"
51 
52 
53 if __name__ == "__main__":
54     file_path = "\\test\CIA_Test01"
55     file_type = 'py'
56     result = EncryptionProject(file_path, file_type).py_c()
57     print(result)

 

2: python 有一个第三方库 jmpy3对上述流程进行了优化,支持单个文件和整个项目进行编译,

  使用起来更加友好,加密生成pyd 文件,反编译成本极高

 

posted @ 2021-12-23 16:07  苏什么苏  阅读(906)  评论(0编辑  收藏  举报