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.mzph.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等平台立即免费调用这些模型。…