System.Security.Cryptography.CryptographicException“填充無效,無法被移除。”

這個異常通常發生在以下幾種情況:
1.密文損壞:密文在傳輸或存儲過程中被篡改或損壞。
2.密鑰不匹配:用于解密的密鑰與加密時使用的密鑰不同。
3.填充模式不匹配:加密時使用的填充模式與解密時指定的填充模式不一致。
4.使用了不正確的IV(如果加密模式需要IV的話):雖然您的代碼中沒有設置IV(在ECB模式下這是允許的,但ECB不安全),但如果您在其他地方加密了數據并且使用了IV,那么在解密時也必須提供相同的IV。
由于您使用的是ECB模式,我們可以排除IV不匹配的問題。但是,其他三個原因仍然可能是問題的根源

1.會拋異常

public bool Decrypt(byte[] cipherText, byte[] Key, ref string ret){if (cipherText == null || cipherText.Length <= 0)throw new ArgumentNullException(nameof(cipherText));if (Key == null || Key.Length <= 0)throw new ArgumentNullException(nameof(Key));string plaintext = null;bool success = false;using (Aes aesAlg = Aes.Create()){aesAlg.Key = Key;// 不設置IV(不推薦)// aesAlg.IV = ...; // 不使用IVaesAlg.Mode = CipherMode.ECB; // 使用ECB模式(不推薦,因為它不安全)aesAlg.Padding = PaddingMode.PKCS7;ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, null); // 傳入null作為IVusing (MemoryStream msDecrypt = new MemoryStream(cipherText))using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))using (StreamReader srDecrypt = new StreamReader(csDecrypt)){try{plaintext = srDecrypt.ReadToEnd(); // 行1,嘗試讀取數據ret = plaintext;success = true;}catch (CryptographicException ex){// 處理解密時可能遇到的加密異常Console.WriteLine("解密時發生錯誤: " + ex.Message);//throw; // 可以選擇重新拋出異常,或者根據需要處理return false;}catch (FormatException ex){// 處理可能的格式異常,例如字符編碼問題Console.WriteLine("數據格式錯誤: " + ex.Message);//throw;return false;}catch (Exception ex){// 處理其他任何可能的異常Console.WriteLine("發生未知錯誤: " + ex.Message);//throw;return false;}}}return success;}
  1. 修正后
public bool Decrypt(byte[] cipherText, byte[] key, ref string ret)
{// 參數驗證if (cipherText == null || cipherText.Length <= 0)throw new ArgumentNullException(nameof(cipherText), "Cipher text cannot be null or empty.");if (key == null || key.Length <= 0)throw new ArgumentNullException(nameof(key), "Key cannot be null or empty.");string plaintext = null;bool success = false;try{using (Aes aesAlg = Aes.Create()){// 設置密鑰(注意:這里假設密鑰長度是有效的AES密鑰長度)aesAlg.Key = key;// 不設置IV(不推薦,因為ECB模式本身就不安全,而且不使用IV進一步降低了安全性)// aesAlg.IV = ...; // 如果使用其他模式,如CBC,則需要設置IV// 使用ECB模式(不推薦,因為它不安全)aesAlg.Mode = CipherMode.ECB;aesAlg.Padding = PaddingMode.PKCS7;// 創建解密器(不傳入IV,因為我們沒有設置它)ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, null);using (MemoryStream msDecrypt = new MemoryStream(cipherText))using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))using (StreamReader srDecrypt = new StreamReader(csDecrypt, Encoding.UTF8)) // 假設加密時使用了UTF8編碼{// 讀取解密后的文本plaintext = srDecrypt.ReadToEnd();ret = plaintext;success = true;}}}catch (CryptographicException ex){// 處理解密時可能遇到的加密異常(例如,密鑰不匹配或數據損壞)Console.WriteLine("Decryption failed: " + ex.Message);// 可以選擇記錄日志、拋出更具體的異常或采取其他恢復措施}catch (FormatException ex){// 處理可能的格式異常(例如,如果解密后的數據不是有效的文本格式)// 注意:這通常發生在StreamReader嘗試讀取非文本數據時Console.WriteLine("Format error: " + ex.Message);// 同樣,可以選擇記錄日志、拋出異常或采取其他措施}catch (Exception ex){// 處理其他任何可能的異常(例如,資源訪問問題或內部錯誤)Console.WriteLine("An unexpected error occurred: " + ex.Message);// 記錄日志、拋出異常或采取其他適當的錯誤處理措施}return success;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76011.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76011.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76011.shtml

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

相關文章

【網絡入侵檢測】Suricata之數據包內容匹配

【作者主頁】只道當時是尋常 【專欄介紹】入侵檢測。專注網絡、主機安全&#xff0c;歡迎關注與評論。 1. 概要 本文詳細介紹了網絡入侵檢測系統&#xff08;如 Suricata&#xff09;中用于檢查數據包或流有效載荷的 Payload 關鍵字。content 用于匹配數據包內容&#xff0c;默…

Spring Boot 整合 Redis 實現點贊功能:從基礎到實踐

在當今互聯網應用開發中&#xff0c;點贊功能幾乎成為了各類內容平臺的標配。它不僅能增加用戶與內容之間的互動&#xff0c;還能直觀地反映內容的受歡迎程度。本文將詳細介紹如何使用 Spring Boot 整合 Redis 來實現一個簡單的文章點贊功能&#xff0c;讓你輕松掌握這一實用技…

openGauss DataVec + Dify,快速搭建你的智能助手平臺

在當今數字化和智能化的時代&#xff0c;大語言模型&#xff08;LLM&#xff09;的應用正以前所未有的速度改變著各個領域的工作方式和用戶體驗。Dify 作為一個開源的大語言模型應用開發平臺&#xff0c;為開發者們提供了便捷且強大的工具&#xff0c;助力構建從基礎智能體到復…

OpenLayers:extent與view extent 介紹

一、范圍的概念 1.什么是范圍&#xff1f; 在Openlayers中范圍&#xff08;Extent&#xff09;是用于表示地理空間區域的一種概念。它通常由一個數字數組構成&#xff0c;數組中的內容為&#xff1a;[最小x坐標&#xff0c;最小y坐標&#xff0c;最大x坐標&#xff0c;最大y坐…

can‘t set boot order in virtualbox

Boot order setting is ignored if UEFI is enabled https://forums.virtualbox.org/viewtopic.php?t99121 如果勾選EFI boot order就是灰色的 傳統BIOS就是可選的 然后選中任意介質&#xff0c;通過右邊的上下箭頭調節順序&#xff0c;最上面的應該是優先級最高的 然后就…

如何在 Kali 上解決使用 evil-winrm 時 Ruby Reline 的 quoting_detection_proc 警告

在使用 Kali Linux 運行 Ruby 工具&#xff08;例如 evil-winrm&#xff09;時&#xff0c;你可能會遇到以下警告&#xff1a; Warning: Remote path completions is disabled due to ruby limitation: undefined method quoting_detection_proc for module Reline這個警告會導…

工資管理系統的主要功能有哪些

工資管理系統通過自動化薪資計算、稅務處理、員工數據管理、報表生成等功能&#xff0c;極大地提升了薪資發放的效率和準確性。在傳統的人工薪資管理中&#xff0c;HR人員需要手動計算每位員工的薪資&#xff0c;并確保符合稅務要求&#xff0c;極易出錯且耗時。而現代工資管理…

C++語言程序設計——02 變量與數據類型

目錄 一、變量與數據類型&#xff08;一&#xff09;變量的數據類型&#xff08;二&#xff09;變量命名規則&#xff08;三&#xff09;定義變量&#xff08;四&#xff09;變量賦值&#xff08;五&#xff09;查看數據類型&#xff08;六&#xff09;數據類型的字節長度&…

咋用fliki的AI生成各類視頻?AI生成視頻教程

最近想制作視頻&#xff0c;多方考查了決定用fliki&#xff0c;于是訂閱了一年試試&#xff0c;這個AI生成的視頻效果來看真是不錯&#xff0c;感興趣的自己官網注冊個賬號體驗一下就知道了。 fliki官網 Fliki生成視頻教程 創建賬戶并登錄 首先&#xff0c;訪問fliki官網并注…

文章記單詞 | 第32篇(六級)

一&#xff0c;單詞釋義 inferior [?n?f??ri?(r)] adj. 較差的&#xff1b;次的&#xff1b;下級的&#xff1b;n. 下屬&#xff1b;次品joy [d???] n. 歡樂&#xff1b;喜悅&#xff1b;樂趣&#xff1b;樂事&#xff1b;v. 因… 而高興resemble [r??zembl] vt. 類…

windows上安裝Jenkins

1. 下載windows版 jenkins安裝包 2. 配置本地安全策略 在 Windows 11/10 上打開本地安全策略。 Secpol.msc 或本地安全策略編輯器是一個 Windows 管理工具&#xff0c;允許您在本地計算機上配置和管理與安全相關的策略。 安全設置-》本地策略-》用戶權限分配-》作為服務登錄…

dfs二叉樹中的深搜(回溯、剪枝)--力扣129、814、230、257

目錄 1.1題目鏈接&#xff1a;129.求根節點到葉結點數字之和 1.2題目描述&#xff1a;給你一個二叉樹的根節點 root &#xff0c;樹中每個節點都存放有一個 0 到 9 之間的數字。 1.3解法(dfs-前序遍歷)&#xff1a; 2.1題目鏈接&#xff1a;814.二叉樹剪枝 2.2題目描述&…

【樹形dp題解】dfs的巧妙應用

【樹形dp題解】dfs的巧妙應用 [P2986 USACO10MAR] Great Cow Gathering G - 洛谷 題目大意&#xff1a; Bessie 正在計劃一年一度的奶牛大集會&#xff0c;來自全國各地的奶牛將來參加這一次集會。當然&#xff0c;她會選擇最方便的地點來舉辦這次集會。 每個奶牛居住在 N N …

【c++深入系列】:new和delete運算符詳解

&#x1f525; 本文專欄&#xff1a;c &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; “生活不會向你許諾什么&#xff0c;尤其不會向你許諾成功。它只會給你掙扎、痛苦和煎熬的過程。但只要你堅持下去&#xff0c;終有一天&…

Spring Boot 實現防盜鏈

在 Spring Boot 項目中實現防盜鏈可以通過多種方式&#xff0c;下面為你介紹兩種常見的實現方法&#xff0c;分別是基于請求頭 Referer 和基于令牌&#xff08;Token&#xff09;的防盜鏈。 基于請求頭 Referer 的防盜鏈 這種方法通過檢查請求頭中的 Referer 字段&#xff0c…

悄悄話識別、 打電話識別、攀高識別三種識別算法

在攝像頭正對場景下,悄悄話識別(唇語識別)、打電話識別和攀高識別是三種典型的行為檢測技術。以下從技術原理、算法模型、應用場景及挑戰等方面進行詳細分析: 一、悄悄話識別(唇語識別) 技術原理 唇語識別通過分析嘴唇的幾何特征(形狀、開合程度、運動軌跡)和動態變化…

centos部署的openstack發布windows虛擬機

?CentOS上部署的OpenStack可以發布Windows虛擬機?。在CentOS上部署OpenStack后&#xff0c;可以通過OpenStack平臺創建和管理Windows虛擬機。以下是具體的步驟和注意事項&#xff1a; ?安裝和配置OpenStack?&#xff1a; 首先&#xff0c;確保系統滿足OpenStack的最低硬件…

【電子通識】案例:電纜的安裝方式也會影響設備的可靠性?

背景 在日常生活中&#xff0c;我們常常會忽略一些看似微不足道的細節&#xff0c;但這些細節有時卻能決定設備的壽命和安全性。比如&#xff0c;你知道嗎&#xff1f;一根電纜的布置方式&#xff0c;可能會決定你的設備是否會因為冷凝水而損壞。 今天&#xff0c;我們就來聊聊…

【Web APIs】JavaScript 操作多個元素 ④ ( 表格全選復選框案例 )

文章目錄 一、核心要點解析 - 表格全選復選框案例1、案例需求2、復選框設置3、獲取 全選復選框 和 普通復選框4、設置 全選復選框 邏輯5、設置 普通復選框 邏輯 二、完整代碼示例1、代碼示例2、執行結果 一、核心要點解析 - 表格全選復選框案例 1、案例需求 在表格中 , 設置 多…

OpenAI發布GPT-4.1系列模型——開發者可免費使用

OpenAI剛剛推出GPT-4.1模型家族&#xff0c;包含GPT-4.1、GPT-4.1 Mini和GPT-4.1 Nano三款模型。重點是——現在全部免費開放&#xff01; 雖然技術升級值得關注&#xff0c;但真正具有變革意義的是開發者能通過Cursor、Windsurf和GitHub Copilot等平臺立即免費調用這些模型。…