python加密打包程序详解

 更新时间:2023年04月13日 09:22:35   作者:你的破壁人呀  
这篇文章主要介绍了python加密打包程序,还给大家介绍了Python实现文件简单加解密的方法,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下

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")

到此这篇关于python加密打包程序的文章就介绍到这了,更多相关python加密打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python面向对象之成员相关知识总结

    Python面向对象之成员相关知识总结

    通过面向对象进行编程时,会遇到很多种情况,也会使用不同的成员来实现,接下来我们来逐一介绍成员特性和应用场景,需要的朋友可以参考下
    2021-06-06
  • mac 安装python网络请求包requests方法

    mac 安装python网络请求包requests方法

    今天小编就为大家分享一篇mac 安装python网络请求包requests方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 关于Python使用turtle库画任意图的问题

    关于Python使用turtle库画任意图的问题

    这篇文章主要介绍了Python turtle库画任意图,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • python 数据加密代码

    python 数据加密代码

    使用Python来做数据加密同样简单,可以使用hashlib或者hmac模块来做数据加密
    2008-12-12
  • Python3.5装饰器原理及应用实例详解

    Python3.5装饰器原理及应用实例详解

    这篇文章主要介绍了Python3.5装饰器原理及应用,结合具体实例形式详细分析了Python3.5装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-04-04
  • 基于python的Tkinter实现一个简易计算器

    基于python的Tkinter实现一个简易计算器

    这篇文章主要介绍了基于python的Tkinter实现一个简易计算器的相关资料,还为大家分享了仅用用50行Python代码实现的简易计算器,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • OpenCV 图像对比度的实践

    OpenCV 图像对比度的实践

    本文主要介绍了OpenCV 图像对比度的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 计算机二级python学习教程(1) 教大家如何学习python

    计算机二级python学习教程(1) 教大家如何学习python

    这篇文章主要为大家详细介绍了计算机二级python学习教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 使用Python处理Excel表格的简单方法

    使用Python处理Excel表格的简单方法

    这篇文章主要介绍了使用Python处理Excel表格的简单方法,本文给大家介绍的非常详细,需要的朋友可以参考下
    2018-06-06
  • 关于NumPy中asarray的用法及说明

    关于NumPy中asarray的用法及说明

    这篇文章主要介绍了关于NumPy中asarray的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论