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.pswp.cn/news/917494.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917494.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917494.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle 19C 在centos中安裝操作步驟和說明

1、oracle 一到五,是在centos下,搭建數據的每個具體詳細步驟。 oracle:一、環境準備-CSDN博客 oracle:二、centos下安裝oracle-CSDN博客 oracle :三、配置LISTEN-CSDN博客 oracle:四、創建數據庫-CSDN博客 oracle:五、配置修改-CSDN博客…

《前端無障礙設計的深層邏輯與實踐路徑》

一個Web應用的價值不僅在于其功能的豐富性,更在于它能否向所有用戶敞開大門。那些被忽略的交互細節—一段沒有替代文本的圖片、一個無法通過鍵盤觸發的按鈕、一組對比度不足的文字——正在悄然構建起一道無形的壁壘,將部分用戶隔絕在數字世界之外。前端無障礙設計(A11y)的本…

ctfshow-web入門-254-266-反序列化

web254 代碼審計&#xff0c;輸入給的username和password ?usernamexxxxxx&passwordxxxxxx web255 這題要從cookie中獲取值并且需要把isVip設為true&#xff0c;并且將序列化之后的結果進行url編碼 <?php class ctfShowUser{public $usernamexxxxxx;public $passw…

ssh服務器端口和本地端口映射

由于服務器防火墻設置&#xff0c;本地能ssh登錄遠程服務器&#xff0c;但本地不能通過http的方式訪問服務&#xff0c;如tensorborad、gradle或其他服務。在不需要修改防火墻安全設置的情況下&#xff0c;這里我們臨時通過ssh端口映射的方式&#xff0c;在本地瀏覽器訪問這些服…

計算機網絡——UDP

1. UDP的背景 1&#xff09;先有TCP&#xff0c;后覺笨重 在TCP被首次提出后&#xff0c;將“可靠傳輸&#xff0c;流量控制&#xff0c;擁塞控制”全做在一個協議里隨著應用增多 ——> 很多場景&#xff08;語音&#xff0c;視頻&#xff09;并不需要萬無一失 ——> 更…

常見的深度學習模塊/操作中的維度約定(系統性總結)

&#x1f7e9; 1. 數據張量&#xff08;特征圖&#xff09;維度這是我們喂進網絡或從網絡中出來的“實際數據”。類型維度格式舉例說明圖像/特征圖(B, C, H, W)(4, 3, 32, 32)PyTorch中最常用的數據布局&#xff08;NCHW&#xff09;圖像/特征圖&#xff08;TensorFlow風格&…

【筆記】重學單片機(51)(上)

為學習嵌入式做準備&#xff0c;重新拿起51單片機學習。此貼為學習筆記&#xff0c;僅記錄易忘點&#xff0c;實用理論基礎&#xff0c;并不是0基礎。 資料參考&#xff1a;清翔零基礎教你學51單片機 51單片機學習筆記1. C語言中的易忘點1.1 數據類型1.2 位運算符1.3 常用控制語…

Arrays.asList() add方法報錯java.lang.UnsupportedOperationException

1. 問題說明 記錄一下遇到的這個bug&#xff0c;下面是段個簡化后的問題重現代碼。 public class Test {public static void main(String[] args) {List<Integer> list Arrays.asList(1, 2, 3);list.add(4);} }2. 原因分析 我們看一下Arrays.asList(…) 的源碼&#xff…

克羅均線策略思路

一個基于移動平均線的交易策略&#xff0c;主要通過比較不同周期的移動平均線來生成買賣信號。該策略交易邏輯思路和特點&#xff1a;交易邏輯思路1. 多頭交易邏輯&#xff1a;- 當當前周期的收盤價高于其4周期移動平均線&#xff0c;并且4周期移動平均線高于9周期移動平均線&a…

Go語言--語法基礎7--函數定義與調用--自定義函數

函數是基本的代碼塊&#xff0c;用于執行一個任務。Go 語言最少有 1 個 main() 函數。你可以通過函數來劃分不同功能&#xff0c;邏輯上每個函數執行的是指定的任務。函數聲明告訴了編譯器函數的名稱、返回類型和參數。函數三要素名稱 》功能參數 》接口返回值 》結果函數分類內…

Ollama模型庫模型下載慢完美解決(全平臺)

前言在我們從ollama下載模型時,會發現ollama最開始下載速度很快,能達到10-20MB/s但到了后期,速度就會越來越慢,最終降低到10-20kb/s下載一個模型大多需要1到1.5小時這是因為ollama服務器負荷過大的問題思路如果在下載中終斷下載,在用ollama run恢復下載,速度就會又提上去,但3-4…

web:js的模塊導出/導入

一般web頁面中&#xff0c;html文件通過標簽script引用js文件。但是js文件之間的引用要通過import/exprot進行導入/導出&#xff0c;同時還要在html文件中對js文件的引用使用type屬性標注。在下面的例子中&#xff0c;html頁面<!DOCTYPE html> <html lang"en&quo…

關于Web前端安全防御之安全頭配置

一、核心安全頭的作用 1. X-Content-Type-Options: nosniff 該響應頭用于阻止瀏覽器對資源的 MIME 類型進行 “嗅探”&#xff08;猜測&#xff09;&#xff0c;強制瀏覽器嚴格遵守服務器返回的 Content-Type 頭部聲明。 風險背景&#xff1a; 瀏覽器默認會對未明確聲明類型…

C++ : 反向迭代器的模擬實現

一、reverse_iterator.h#pragma once namespace txf { //外界傳什么類型的iteator&#xff0c;它就用什么iterator 初始化 , list用_list_iterator<T,T&,,T*> ,vector<T> 用T*template<class Iterator,class Ref,class Ptr>//在這個反向迭代器中涉及到…

自動化與配置管理工具 ——SaltStack

一、SaltStack 概述1.1 核心特性SaltStack 是一款開源的自動化運維工具&#xff0c;采用客戶端 - 服務器&#xff08;C/S&#xff09;架構&#xff0c;以高效、靈活和可擴展著稱。其核心特性包括&#xff1a;高性能架構&#xff1a;基于 ZeroMQ 消息隊列&#xff0c;支持大規模…

Rust → WebAssembly 的性能剖析全指南

一、用優化&#xff08;Release&#xff09;構建 ? 務必在做性能測量前使用 優化模式 構建你的 WASM。默認情況下&#xff1a; wasm-pack build → Release 優化wasm-pack build --dev 或 cargo build → Debug&#xff0c;性能大打折扣 優化編譯能開啟 LLVM 的各項優化和 LT…

第15屆藍橋杯Pthon青少組_國賽_中/高級組_2024年9月7日真題

更多內容請查看網站&#xff1a;【試卷中心 -----> 藍橋杯----> Python----> 國賽】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 第15屆藍橋杯Pthon青少組_國賽_中/高級組_2024年9月7日真題 一、單選題 第 1 題 單選題 下列運算符中&#xff0c;表示并集的…

【Django】-9- 單元測試和集成測試(上)

一、Django 項目單元 & 集成測試準備 &#x1f447;依賴安裝&#xff08;給項目裝 “測試小幫手”&#x1f37c;&#xff09;pdm add -d black isort flake8 pytest pytest-django pytest-coverage &#x1f449; 這行命令像在給項目 “采購” 測試工具&#xff1a;black …

VUE-第二季-01

目錄 1.Vue程序初體驗 1.1 下載并安裝vue.js 1.2 第一個Vue程序 1.3 Vue的data配置項 1.4 Vue的template配置項 1.5 Vue實例 和 容器 的關系是&#xff1a;一夫一妻制 2.Vue核心技術 2.0 Vue的模板語法 2.0.1 插值語法 插值語法總結&#xff1a; 2.0.2 指令語法 指…

Android 15 中禁用/啟用應用的系統級方法

在 Android 15 的開發中,有時我們需要以系統級權限來控制應用的啟用狀態。本文將介紹如何使用 PackageManager 來實現應用的禁用和啟用功能。 核心方法 在 Android 15 代碼中,可以使用以下方法來禁用或啟用應用: packageManager.setApplicationEnabledSetting(pkg,Packag…