pyca/cryptography库的学习(7)中的RSA密钥保存

server/2024/12/31 18:28:30/
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization# 生成 RSA 私钥
private_key = rsa.generate_private_key(public_exponent=65537,key_size=2048,
)# 将私钥序列化为 PEM 格式
pem_private_key = private_key.private_bytes(encoding=serialization.Encoding.PEM,format=serialization.PrivateFormat.PKCS8,encryption_algorithm=serialization.NoEncryption()  # 无加密保存
)# 保存私钥到 PEM 文件
with open("private_key.pem", "wb") as pem_file:pem_file.write(pem_private_key)# 获取公钥
public_key = private_key.public_key()# 将公钥序列化为 PEM 格式
pem_public_key = public_key.public_bytes(encoding=serialization.Encoding.PEM,format=serialization.PublicFormat.SubjectPublicKeyInfo
)# 保存公钥到 PEM 文件
with open("public_key.pem", "wb") as pem_file:pem_file.write(pem_public_key)print("私钥和公钥已成功保存为 PEM 文件!")

读取私钥的方式如下:
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.serialization import load_pem_private_key

从 PEM 文件中加载私钥

with open("private_key.pem", "rb") as pem_file:private_key = load_pem_private_key(pem_file.read(),password=None  # 如果私钥加密了,提供密码,例如 b"your_password")

使用私钥解密消息:

# 假设有一个加密的消息 encrypted_message (字节类型)
encrypted_message = b"...加密的数据..."  # 替换为实际加密数据# 解密消息
decrypted_message = private_key.decrypt(encrypted_message,padding.OAEP(  # 使用 OAEP 填充mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None)
)# 输出解密后的消息
print("解密后的消息:", decrypted_message.decode("utf-8"))

http://www.ppmy.cn/server/154253.html

相关文章

QT 学习第十四天

QT 学习十四天 布局 布局管理Qt Widgets 布局布局管理器简介基本布局管理器栅格布局管理器窗体布局管理器综合使用布局管理器设置部件大小可扩展窗口 布局管理 今天讲 Qt Widgets 和 Qt Quick 中的布局。 前者主要用布局管理器 后者除了布局管理器还有基于锚的布局&#xff08…

【代码随想录】刷题记录(86)-跳跃游戏 II

题目描述&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返…

【服务器主板】定制化:基于Intel至强平台的全新解决方案

随着数据处理需求不断增长&#xff0c;服务器硬件的发展也在持续推进。在这一背景下&#xff0c;为用户定制了一款全新的基于Intel至强平台的服务器主板&#xff0c;旨在提供强大的计算能力、优异的内存支持以及高速存储扩展能力。适用于需要高性能计算、大规模数据处理和高可用…

MYSQL预留帐户

MySQL安装过程的一部分是数据目录初始化。在数据目录初始化期间&#xff0c;MySQL创建应被视为预留的用户帐户&#xff1a; rootlocalhost&#xff1a;用于管理目的。此帐户具有所有权限&#xff0c;是系统帐户&#xff0c;可以执行任何操作。严格来说&#xff0c;这个帐户名称…

HTML 画布:创意与技术的融合

HTML 画布:创意与技术的融合 HTML 画布(<canvas>)元素是现代网页设计中的一个强大工具,它为开发者提供了一个空白画布,可以在上面通过JavaScript绘制图形、图像和动画。这种技术不仅为网页增添了视觉吸引力,还极大地丰富了用户的交互体验。本文将深入探讨HTML画布…

Info.plist contained no UIScene configuration dictionary (looking for configura

新建项目兼容低级IOS版本,将SceneDelegate.h,SceneDelegate.m删掉报错 [SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)") 解决方法: 在info.plist文件中添加Application Scene Manif…

C# WPF读写STM32/GD32单片机Flash数据

1.安装jlink 下载你需要的Jlink版本 JLink-Windows-V792k-x86-64 JLink-Windows-V810k-x86-64 https://download.csdn.net/download/hmxm6/90178195 2.Visual Studio创建WPF项目 如果没有这个选项请看 https://blog.csdn.net/hmxm6/article/details/132914337 创建完…

【C++】do-while 循环

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;1. 介绍 do-while 语法格式1.1 基本语法1.2 do-while 与 while/for 区别 &#x1f4af;2. 执行流程分析2.1 执行流程图2.2 分析比较 &#x1f4af;3. 实例分析3.1 课上例子…