欢迎光临
我们一直在努力

4种Python文件或者文本加密的方式

需要注意的是,编译成pyc或者pyo文件后需要将命名改成与源Python命名一致,将其放在源目录下,虽然其他python文件调用pyd时显示不能检测到该模块,但实际上可以运行。

私信小编01即可获取大量Python学习资料

由于pyc的编译收到python版本的影响,所以当将编译后的pyc迁移到另一台电脑中时,最好保持python环境一致。

将python文件.py编译成pyc二进制文件:

python -m py_file.py

或者通过脚本运行


import py_compile ##单个文件编译

import compileall ##多个文件编译

py_compile.compile('path') ##path是包括.py文件名的路径
  1.  

将python文件编译成pyo二进制文件:

python -O -m py_file.py

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。

注意事项:pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。
什么是pyo文件?
pyo是优化编译后的程序 python -O 源文件即可将源程序编译为pyo文件

什么是pyd文件?

pyd是python的动态链接库。windows上为pyd文件,Linux上为so文件,pyd文件实际就是dll文件
编译成pyd的方法如下:
# 命令行下:(在项目目录下打开命令行或者shell,该命令只能编译一个文件,编译之后会发现出现三个文件,yourmod.c、yourmod.html、yourmod-win_amd64.pyd,此时将c、html和原py文件删除,将pyd文件命名更改为yourmod就可以)
cythonize -a -i yourmod.pyx

# python代码:(在原项目中编写setup.py文件)



from distutils.core import setup

from Cython.Build import cythonize

import os


'''

该文件的执行需要的在Terminal中输入 python setup.py build_ext --inplace !!!

使用Cpython 编译python文件,关键函数编译成pyd文件(相当于dll)

'''

# 针对多文件情况设置,单文件就只写一个就行

key_funs = ["yourmod1.py", "yourmod2.py", "yourmod3.py"]


setup(

name="XX app",

ext_modules = cythonize(key_funs),

)


'''

1、将编译后的pyd文件的命名更改成与原py文件一致

2、删除编译后得到的c文件和原py文件

'''


print("——————", os.getcwd(), "——————")


files = os.listdir(os.getcwd())

print(files)


for fi in files:

if fi.__contains__(".pyd"):

re_name = fi.split(".")[0] + ".pyd"

print(re_name)

os.rename(fi, re_name)

elif fi.__contains__(".c") or fi in key_funs:

os.remove(fi)


# 运行方式 在原目录的命令行下执行

python setup.py build_ext --inplace
  1.  

3、将Python文件转成exe封装(文件加密)

参考:https://blog.csdn.net/SoaringLee_fighting/article/details/78892876

4、采用hashlib或pycrypto模块进行文本加密

hashlib模块:

import hashlib

sha1 = hashlib.sha1('文本内容') #加密

osv=sha1.hexdigest()

print(osv)

bx=bytes(osv,encoding='utf-8') #转换类型

with open('1.txt','wb') as f: #以二进制写类型打开

f.write(bx) #写入文件

get_sha1('')

pycrypto模块:

from Crypto.Cipher import AES

obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')

message = "The answer is no"

ciphertext = obj.encrypt(message)

>>> ciphertext

'xd6x83x8dd!VTx92xaa`Ax05xe0x9bx8bxf1'

>>> obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')

>>> obj2.decrypt(ciphertext)

'The answer is no'

需要注意的是pyd文件在被其它python文件调用时依然不能被识别,但能够运行,而且setup.py的文件的执行需要的在Terminal中输入 python setup.py build_ext –inplace !!!

基于pyc、pyo容易破解的原因,建议使用pyd文件进行发布,但python3下pyc、pyo文件的破解本人未经试验,只是听说,故具体选择哪种方式大家可根据具体情况进行选择

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:英协网 » 4种Python文件或者文本加密的方式

分享到: 生成海报
avatar

热门文章

  • 评论 抢沙发

    • QQ号
    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址

    登录

    忘记密码 ?

    切换登录

    注册

    我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活