python加密打包程序详解
作者:你的破壁人呀 发布时间:2021-03-02 02:02:46
python加密打包程序
加密方式:将py文件转为pyd格式
安装easycython模块 pip install easycython
使用easycython命令将py转pyd: easycython xx.py, 会在同一目录生成xx.pyd(如果是64位系统生成的文件名为xx.cp36-win_amd64.pyd);
将xx.cp36-win_amd64.pyd重命名为xx.pyd;
使用pyinstaller打包(由于xx.py和xx.pyd在同一目录, pyinstaller会优先打包pyd), 打包时添加—hidden-import xx选项.
生成的打包文件中会包含xx.pyd;
注意: 如果打包时使用了—key选项, 但打包的模块是pyd格式的, 则pyd文件不会被加密, 只是打包
打包脚本:
打包参数说明:
-F:仅仅生成一个文件,不暴露其他信息,启动较慢。
-D:生成一个文件夹,里面是多文件模式,启动快。
-w:窗口模式打包,不显示控制台。
示例
pyinstaller -F -w -i logo.ico python_file1.py python_file2.py python_file3.py
补充:Python实现文件简单加解密
一、基础知识
python中的异或操作符为 ^ ,也记作XOR,按位异或的结果是:值相同时异或为0,值不同时异或为1,一共有四种情况:0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^ 1 = 0,使用异或可以对文件进行简单的加解密操作。
加密操作:首先将文件转换为二进制数,再随机生成一个与该二进制等长的密钥,将文件的二进制数与密钥进行异或操作,就能得到加密后的二进制数,存储为加密文件。
解密操作:将加密后的二进制文件与密钥再进行异或操作,就能得到原二进制数,再将原二进制数恢复成文件。
二、加解密算法
1.导入运行库
import json
from pathlib import Path
from secrets import token_bytes
import argparse
2.定义生成密钥函数
def random_key(length):
key = token_bytes(nbytes=length) #根据指定长度生成随机密钥
key_int = int.from_bytes(key, 'big') #将byte转换为int
return key_int
3.定义加解密单元
def encrypt(raw): #加密单元
raw_bytes = raw.encode() #将字符串编码成字节串
raw_int = int.from_bytes(raw_bytes, 'big') #将byte转换成int
key_int = random_key(len(raw_bytes)) #根据长度生成密钥
return raw_int ^ key_int, key_int #将密钥与文件异或,返回异或后的结果和密钥
def decrypt(encrypted, key_int): #解密单元
decrypted = encrypted ^ key_int #将加密后的文件与密钥异或
length = (decrypted.bit_length() + 7) // 8 #计算所占比特大小
decrypted_bytes = int.to_bytes(decrypted, length, 'big') #将int转换回byte
return decrypted_bytes.decode() #解码后返回
4.加密文件
def encrypt_file(path, key_path=None, *, encoding='utf-8'): #参数path指定文件地址
path = Path(path)
cwd = path.cwd() / path.name.split('.')[0]
path_encrypted = cwd / path.name
if key_path is None:
key_path = cwd / 'key'
if not cwd.exists():
cwd.mkdir()
path_encrypted.touch()
key_path.touch()
//打开文件并将内容写入
with path.open('rt', encoding=encoding) as f1, \
path_encrypted.open('wt', encoding=encoding) as f2, \
key_path.open('wt', encoding=encoding) as f3:
encrypted, key = encrypt(f1.read())
json.dump(encrypted, f2)
json.dump(key, f3)
5.解密文件
def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):
path_encrypted = Path(path_encrypted)
cwd = path_encrypted.cwd()
path_decrypted = cwd / 'decrypted'
if not path_decrypted.exists():
path_decrypted.mkdir()
path_decrypted /= path_encrypted.name
path_decrypted.touch()
if key_path is None:
key_path = cwd / 'key'
with path_encrypted.open('rt', encoding=encoding) as f1, \
key_path.open('rt', encoding=encoding) as f2, \
path_decrypted.open('wt', encoding=encoding) as f3:
decrypted = decrypt(json.load(f1), json.load(f2))
f3.write(decrypted)
三、测试
将要加密的文件放到py文件同级目录下,运行以下将1.txt加密。
encrypt_file("D:/PyCharm Community Edition 2021.3.2/Workplace/encryption/1.txt")
将要解密的文件和密钥放到py文件同级目录下,运行以下将1.txt解密还原。
decrypt_file("D:/PyCharm Community Edition 2021.3.2/Workplace/encryption/1.txt")
来源:https://blog.csdn.net/sinat_36564972/article/details/129975748


猜你喜欢
- 前言Python 字典 update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中。语法格式d.
- 本文主要研究的是Python对内存的使用(深浅拷贝)的相关问题,具体介绍如下。浅拷贝就是对引用的拷贝(只拷贝父对象) 深拷贝就是对对象的资源
- 分享一个 * 真网页拾色器(调色板),颜色丰富216色,使用方便。运行截图:<html id="container"
- 本文实例讲述了Python自定义函数实现求两个数最大公约数、最小公倍数。分享给大家供大家参考,具体如下:1. 求最小公倍数的算法:最小公倍数
- 本文实例讲述了python处理xml文件的方法。分享给大家供大家参考,具体如下:前一段时间因为工作的需要,学习了一点用Python处理xml
- 最终的效果废话不多少,直接上图这里可以清楚的看到,数据库里包含了日期,内容,和网站link下面我们来分析怎么实现使用的库import req
- Numpy随机矩阵: np.random.randn(d0, d1, d2, ...)矩阵大小与形状: np.ndarray.size 与
- 参数数量及其作用该函数共有两个参数,分别是key和scope。def get_collection(key, scope=None) Wra
- 一:原理: 先看一下点击事件的执行顺序: 单击(click):mousedown,mouseout,click; 双击(dblclick):
- 大量的多行段落本身就会降低可读性,同时空行分段也比空格分段有更高的可适应性...前文讨论的热烈程度远超我预期,正好还有之前查阅资料拍的几张实
- 本文实例讲述了python简单的函数定义和用法。分享给大家供大家参考。具体分析如下:这里定义了一个温度转换的函数及其用法。def conve
- 在解决日常的支持需求中,经常会遇到一些用户反馈一些无法简单复现的bug,有很大一部分的bug是由于用户自身的网络环境波动,或者是本身网络环境
- 在用爬虫爬取网站数据时,有些站点的一些关键数据的获取需要使用账号登录,这里可以使用requests发送登录请求,并用Session对象来自动
- REPLACE用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。语法REPLACE ( ''strin
- 前言:Event在python线程间同步是一种常用的方法,本博客以生产者线程和工作者线程为例说明Event在线程间进行10次同步的应用。im
- 以前在网上看到的最简单的拖动对象的代码,忘记作者叫什么了。原始代码在IE下有些小问题,并且声明了文档类型为xhtml 1.0后,在FF等非I
- 就目前互联网上大小网站而言,大部分都是采用ASP+ACCESS/SQL Server或者PHP+MySQL来编写;事实上,ASP和MySQL
- 简介pandas按条件筛选数据时,除了使用query()方法,还可以使用isin和对isin取反进行条件筛选.代码 import panda
- User模型 User模型是这个框架的核心部分。他的完整的路径是在django.contrib.auth.models.User。字段 内置
- 这篇文章主要介绍了python识别html主要文本框过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需