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 文件,反編譯成本極高