当前位置: 首页 > news >正文

RSA 解密逻辑

以下是使用类的方式封装 RSA 解密逻辑,使其更易于调用和管理:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 
import base64 class RSADecryptor:"""RSA 解密工具类,封装解密逻辑,方便调用 """def __init__(self, private_key_pem=None, private_key_file=None):"""初始化 RSA 解密器参数:private_key_pem (str): PEM 格式的私钥字符串 private_key_file (str): 私钥文件路径"""if private_key_pem is None and private_key_file is None:raise ValueError("必须提供私钥(PEM字符串或文件路径)")if private_key_pem:self.private_key = RSA.import_key(private_key_pem)else:with open(private_key_file, 'r') as f:self.private_key = RSA.import_key(f.read())self.cipher = PKCS1_v1_5.new(self.private_key)def decrypt(self, encrypted_text):"""解密 RSA 加密的文本 参数:encrypted_text (str): Base64 编码的加密字符串 返回:str: 解密后的原始字符串 """try:encrypted_data = base64.b64decode(encrypted_text)decrypted_data = self.cipher.decrypt(encrypted_data, None)if decrypted_data is None:raise ValueError("解密失败,可能是私钥不匹配")return decrypted_data.decode('utf-8')except Exception as e:raise ValueError(f"解密过程中发生错误: {str(e)}")@staticmethoddef decrypt_with_key(encrypted_text, private_key_pem):"""静态方法:直接用给定的私钥解密 参数:encrypted_text (str): Base64 编码的加密字符串private_key_pem (str): PEM 格式的私钥字符串返回:str: 解密后的原始字符串"""decryptor = RSADecryptor(private_key_pem=private_key_pem)return decryptor.decrypt(encrypted_text)示例用法 
if __name__ == "__main__":# 示例私钥 (实际使用时替换为您的私钥)SAMPLE_PRIVATE_KEY = """-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEAz7v5z5X9z5v5z5X9z5v5z5X9z5v5z5X9z5v5z5X9z5v5...(这里放您的实际私钥)...-----END RSA PRIVATE KEY-----"""# 示例加密文本 ENCRYPTED_TEXT = "aGVsbG8gd29ybGQh"  # Base64 编码的加密文本 # 使用方法1:实例化后解密 try:decryptor = RSADecryptor(private_key_pem=SAMPLE_PRIVATE_KEY)result = decryptor.decrypt(ENCRYPTED_TEXT)print(f"解密结果: {result}")except Exception as e:print(f"解密失败: {e}")# 使用方法2:静态方法直接解密try:result = RSADecryptor.decrypt_with_key(ENCRYPTED_TEXT, SAMPLE_PRIVATE_KEY)print(f"静态方法解密结果: {result}")except Exception as e:print(f"静态方法解密失败: {e}")

主要特点:

  1. 灵活的初始化方式:

    • 可以通过直接传入PEM格式的私钥字符串初始化
    • 也可以通过指定私钥文件路径初始化
  2. 两种使用方式:

    • 实例化后重复使用(适合需要多次解密的情况)
    • 静态方法直接调用(适合一次性使用)
  3. 完善的错误处理:

    • 初始化时检查私钥有效性
    • 解密时检查解密结果有效性
    • 捕获并处理各种可能的异常
  4. 清晰的接口设计:

    • 方法命名和参数命名直观
    • 包含详细的文档注释

使用建议:

  1. 如果是长期使用的场景,建议实例化后重复使用,避免重复加载私钥
  2. 如果是脚本或临时使用,可以直接使用静态方法
  3. 私钥建议存储在安全的地方,不要硬编码在代码中

您可以根据实际需求调整这个类,比如添加对OAEP填充方式的支持,或者增加批量解密的方法。

http://www.xdnf.cn/news/1239193.html

相关文章:

  • 【从零开始学习Redis】初识Redis
  • 第13章 文件输入/输出
  • 网关与路由器的区别
  • 【MySQL】MySQL中锁有哪些?
  • 常见的框架漏洞(Thinkphp,spring,Shiro)
  • 2025年测绘程序设计比赛--基于统计滤波的点云去噪(已获国特)
  • 波士顿房价预测工具 - XGBoost实现
  • openwrt 23.05编译intel igb5.19.4驱动
  • 在Ansys Mechanical中对磨损进行建模
  • nestjs @Param 从入门到精通
  • Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
  • WebMvc自动配置流程讲解
  • 研报复现|史蒂夫·路佛价值选股法则
  • 控制建模matlab练习07:比例积分控制-③PI控制器的应用
  • Java ++i 与 i++ 底层原理
  • 学习游戏制作记录(实现克隆攻击的克隆复制和水晶代替克隆)8.3
  • LCL滤波器及其电容电流前馈有源阻尼设计软件【LCLAD_designer】
  • Linux网络编程 --- 多路转接select
  • 07.config 命令实现动态修改配置和慢查询
  • Redis——常用指令汇总指南(三)(哈希类型)
  • Timer实现定时调度的原理是什么?
  • ORA-12514:TNS: 监听程序当前无法识别连接描述符中请求的服务
  • 【2025/08/03】GitHub 今日热门项目
  • 案例介绍|JSON数据格式的转换|pyecharts模块简介
  • 计算机网络(TCP篇)
  • io_setup系统调用及示例
  • C++编译过程与GDB调试段错误和死锁问题
  • 【前端:Html】--1.2.基础语法
  • 源代码本地安装funasr
  • 【Linux网络编程基础--socket地址API】