Python 实现非对称加密的 A 端和 B 端软件的详细步骤及代码示例

以下是使用 Python 实现非对称加密的 A 端和 B 端软件的详细步骤及代码示例,并且会说明如何将其打包为可执行的 .exe 文件。这里我们使用 cryptography 库来实现 RSA 非对称加密算法。

1. 安装依赖库

首先,确保你已经安装了 cryptography 库。如果没有安装,可以使用以下命令进行安装:

pip install cryptography

2. 编写 A 端软件代码(a_end.py

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
import base64def encrypt_message(public_key_pem, plaintext):# 加载公钥public_key = serialization.load_pem_public_key(public_key_pem.encode(),backend=default_backend())# 加密明文ciphertext = public_key.encrypt(plaintext.encode(),padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None))# 将加密后的字节数据转换为 Base64 编码的字符串,方便复制encrypted_base64 = base64.b64encode(ciphertext).decode()return encrypted_base64if __name__ == "__main__":# 读取公钥文件try:with open('public_key.pem', 'r') as f:public_key_pem = f.read()except FileNotFoundError:print("未找到公钥文件 'public_key.pem',请确保文件存在。")exit(1)# 输入明文plaintext = input("请输入要加密的明文: ")# 加密明文encrypted_text = encrypt_message(public_key_pem, plaintext)# 输出可复制的密文print("加密后的密文(可复制):")print(encrypted_text)

3. 编写 B 端软件代码(b_end.py

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
import base64def generate_key_pair():# 生成私钥private_key = rsa.generate_private_key(public_exponent=65537,key_size=2048,backend=default_backend())# 生成公钥public_key = private_key.public_key()# 保存私钥到文件private_pem = private_key.private_bytes(encoding=serialization.Encoding.PEM,format=serialization.PrivateFormat.PKCS8,encryption_algorithm=serialization.NoEncryption())with open('private_key.pem', 'wb') as f:f.write(private_pem)# 保存公钥到文件public_pem = public_key.public_bytes(encoding=serialization.Encoding.PEM,format=serialization.PublicFormat.SubjectPublicKeyInfo)with open('public_key.pem', 'wb') as f:f.write(public_pem)print("密钥对生成成功,私钥保存为 'private_key.pem',公钥保存为 'public_key.pem'。")def decrypt_message(private_key_pem, encrypted_base64):# 加载私钥private_key = serialization.load_pem_private_key(private_key_pem.encode(),password=None,backend=default_backend())# 将 Base64 编码的密文转换为字节数据ciphertext = base64.b64decode(encrypted_base64)# 解密密文plaintext = private_key.decrypt(ciphertext,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None))return plaintext.decode()if __name__ == "__main__":# 生成密钥对generate_key_pair()# 读取私钥文件try:with open('private_key.pem', 'r') as f:private_key_pem = f.read()except FileNotFoundError:print("未找到私钥文件 'private_key.pem',请确保文件存在。")exit(1)# 输入密文encrypted_text = input("请输入要解密的密文: ")# 解密密文decrypted_text = decrypt_message(private_key_pem, encrypted_text)# 输出解密后的明文print("解密后的明文:")print(decrypted_text)

4. 打包为 .exe 文件

我们可以使用 PyInstaller 库将 Python 脚本打包为可执行的 .exe 文件。首先,确保你已经安装了 PyInstaller

pip install pyinstaller
打包 A 端软件

在命令行中,进入包含 a_end.py 文件的目录,然后运行以下命令:

pyinstaller --onefile a_end.py

打包完成后,在 dist 目录下会生成 a_end.exe 文件。

打包 B 端软件

同样,在命令行中进入包含 b_end.py 文件的目录,运行以下命令:

pyinstaller --onefile b_end.py

打包完成后,在 dist 目录下会生成 b_end.exe 文件。

5. 使用说明

  • B 端软件(b_end.exe:运行该软件会生成密钥对,将私钥保存为 private_key.pem,公钥保存为 public_key.pem。然后提示你输入要解密的密文,输入后会输出解密后的明文。
  • A 端软件(a_end.exe:运行该软件前,需要确保 public_key.pem 文件存在。运行后,输入要加密的明文,软件会输出加密后的密文,该密文可以复制并提供给 B 端进行解密。

通过以上步骤,你就可以实现一个简单的非对称加密的 A 端和 B 端软件,并将其打包为可执行的 .exe 文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31285.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么实现: 大语言模型微调案例

怎么实现: 大语言模型微调案例 目录 怎么实现: 大语言模型微调案例输入一个反常识的问题:首都在北京天安门之后对输出模型进行测试:首都在北京天安门微调代码:测试微调模型代码:微调输出模型结构输出模型参数大小对比Qwen 2.5_0.5:53MB输出模型:951MB 是一样的,没有进行…

知乎后台管理系统:数据库系统原理实验1——数据库基础概念

实验背景 通过练习绘制语义网络,加深对于基本概念之间关系的理解和掌握。掌握在VISIO中绘制能准确表达基本概念之间关系的语义网络的技能。了解并比较数据模型的Chen’s表示法和UML表示法。理解关系模型设计中的完整性约束的重要性。掌握在Linux操作系统下远程访问…

超过 37000 台 VMwareESXi 服务器可能受到持续攻击威胁

近日,威胁监测平台影子服务器基金会(The Shadowserver Foundation)发布报告,指出超 3.7 万个互联网暴露的威睿(VMware)ESXi 实例存在严重安全隐患,极易受到 CVE-2025-22224 漏洞的攻击。该漏洞属…

Linux《基础开发工具(中)》

在之前的Linux《基础开发工具(上)》当中已经了解了Linux当中到的两大基础的开发工具yum与vim;了解了在Linux当中如何进行软件的下载以及实现的基本原理、知道了编辑器vim的基本使用方式,那么接下来在本篇当中将接下去继续来了解另…

Vue3 Pinia 符合直觉的Vue.js状态管理库

Pinia 符合直觉的Vue.js状态管理库 什么时候使用Pinia 当两个关系非常远的组件,要传递参数时使用Pinia组件的公共参数使用Pinia

知识库Dify和cherry无法解析影印pdf word解决方案

近期收到大量读者反馈:上传pdf/图文PDF到Dify、Cherry Studio等知识库时,普遍存在格式错乱、图片丢失、表格失效三大痛点。 在试用的几款知识库中除了ragflow具备图片解析的能力外,其他的都只能解析文本。 如果想要解析扫描件&#xff0c…

Webservice创建

Webservice创建 服务端创建 3层架构 service注解(commom模块) serviceimpl(server) 服务端拦截器的编写 客户端拦截器 客户端调用服务端(CXF代理) 客户端调用服务端(动态模式调用&a…

腾讯云低代码开发应用

创建客户端应用 如上所示,登录腾讯云微搭低代码业务控制台,开始搭建企业官网应用 如上所示,在腾讯云微搭低代码业务控制台中,开始创建企业官网应用 如上所示,在腾讯云微搭低代码业务控制台中,开始编辑企业官…

【Java开发指南 | 第三十四篇】IDEA没有Java Enterprise——解决方法

读者可订阅专栏:Java开发指南 |【CSDN秋说】 文章目录 1、新建Java项目2、单击项目名,并连续按两次shift键3、在搜索栏搜索"添加框架支持"4、勾选Web应用程序5、最终界面6、添加Tomcat 1、新建Java项目 2、单击项目名,并连续按两次…

深度学习原理与Pytorch实战

深度学习原理与Pytorch实战 第2版 强化学习人工智能神经网络书籍 python动手学深度学习框架书 TransformerBERT图神经网络: 技术讲解 编辑推荐 1.基于PyTorch新版本,涵盖深度学习基础知识和前沿技术,由浅入深,通俗易懂&#xf…

uniapp项目运行失败Error: getaddrinfo *.bspapp.com 文件查找失败uview-ui及推荐MarkDown软件 Typora

一、uniapp项目运行失败Error: getaddrinfo *.bspapp.com 文件查找失败uview-ui 在运行一个uniapp项目时,出现报错 文件查找失败:uview-ui,Error: getaddrinfo ENOTFOUND 960c0a.bspapp.com。hostname异常,报错的详细信息如下&…

什么是vue的keep-alive?它是如何实现的?具体缓存了什么内容?

文章目录 一、keep-alive 的核心作用二、实现原理1. 缓存管理策略2. 核心源码解析(Vue 2.x 简化版)3. 缓存生命周期 三、缓存的具体内容1. 缓存对象结构2. 具体缓存内容 四、使用示例1. 基础用法2. 配置缓存策略 五、注意事项六、实现流程图解 Vue 的 k…

pytest基础知识

pytest知识了解 pytest的基础知识了解:Python测试框架之pytest详解_lovedingd的博客-CSDN博客_pytest框架 (包含设置断点,pdb,获取最慢的10个用例的执行耗时) pytest-pytest.main()运行测试用例,pytest参数: pytest-…

Liunx(CentOS-6-x86_64)使用Nginx部署Vue项目

一:编译vue项目和上传到linux系统 通过本地编译器编译后的文件 上传服务器后的 二:安装 node(版本 v16.20.2)和npm( 8.19.4或 9.6.5) 备注一:安装nodejs就是安装node和npm, su…

分布式锁—Redisson的同步器组件

1.Redisson的分布式锁简单总结 Redisson分布式锁包括:可重入锁、公平锁、联锁、红锁、读写锁。 (1)可重入锁RedissonLock 非公平锁,最基础的分布式锁,最常用的锁。 (2)公平锁RedissonFairLock 各个客户端尝试获取锁时会排队,按照队…

2025年渗透测试面试题总结-字某某动-安全研究实习生(一面)(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 字某某动-安全研究实习生(一面) 一、岗位认知与方向选择 1. 对公司业务的理解 …

Dify平台部署记录

安装dify项目 官网地址:http://difyai.com/ github地址:https://github.com/langgenius/dify 下载项目: git clone https://github.com/langgenius/dify.git下载过慢,直接访问网页下载zip压缩包: 解压,…

串口数据记录仪DIY,体积小,全开源

作用 产品到客户现场出现异常情况,这个时候就需要一个日志记录仪、黑匣子,可以记录产品的工作情况,当出现异常时,可以搜集到上下文的数据,从而判断问题原因。 之前从网上买过,但是出现过丢数据的情况耽误…

如何用HTML5 Canvas实现电子签名功能✍️

🤖 作者简介:水煮白菜王,一位资深前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&a…

Uniapp项目运行到微信小程序、H5、APP等多个平台教程

摘要:Uniapp作为一款基于Vue.js的跨平台开发框架,支持“一次开发,多端部署”。本文将手把手教你如何将Uniapp项目运行到微信小程序、H5、APP等多个平台,并解析常见问题。 一、环境准备 在开始前,请确保已安装以下工具…