首页 / 知识
关于c#:为什么密码错误会导致“填充无效且无法删除”?
2023-04-12 06:04:00

Why does a bad password cause “Padding is invalid and cannot be removed”?我需要一些简单的字符串加密,因此我编写了以下代码(此处有很多"启发"):
该代码看起来可以正常工作,除了使用不正确的密钥解密数据时,我在cryptoString中的c.Close()行上收到一个CryptographicException-"填充无效且无法删除"。 示例代码:
我的问题是,这是可以预期的吗? 我以为用错误的密码解密只会导致无意义的输出,而不是异常。 尽管已经回答了这个问题,但我认为最好解释一下为什么会这样。 通常使用填充方案,因为大多数密码过滤器在语义上都不安全,并且无法防止某些形式的密码攻击。例如,通常在RSA中,使用OAEP填充方案来防止某种形式的攻击(例如,选择的明文攻击或盲目攻击)。 填充方案在发送消息之前将一些(通常)随机垃圾附加到消息m上。例如,在OAEP方法中,使用了两个Oracle(这是一个简单的解释): 这为您提供了对消息的随机化,并提供了一种测试消息是否为垃圾的方法。由于填充方案是可逆的,因此当您解密消息时却无法说出消息本身的完整性,那么您实际上可以对填充进行断言,因此您可以知道消息是否已正确解密或您做错了什么(即有人篡改了消息或您使用了错误的密钥) 我遇到过类似的"填充无效且无法删除"的情况。例外,但就我而言,关键IV和填充是正确的。 事实证明,清除加密流是所缺少的。 像这样:
如果希望正确使用,则应在密文中添加身份验证,以便可以验证它是正确的密码还是未修改密文。如果最后一个字节未解密为16个有效填充值(0x01-0x10)之一,则使用ISO10126的填充将仅引发异常。因此,您有1/16的机率不会用错误的密码抛出异常,在这种情况下,如果您对它进行身份验证,则可以采用确定性的方式来判断您的解密是否有效。 使用crypto api似乎很容易,但实际上很容易出错。例如,您为密钥和iv派生使用了固定的盐,这意味着使用相同密码加密的每个密文都将使用该密钥重用它的IV,这会破坏CBC模式的语义安全性,IV既需要不可预测且唯一给定的密??钥。 出于容易出错的原因,我有一个代码段,我试图对其进行审查并保持最新(评论,欢迎发布问题): 字符串C#的对称身份验证加密的现代示例。
如果使用错误密码时使用
如果您排除了密钥不匹配的情况,那么除了
如果要严格使用
我被这个(或类似的)咬住了:
出现异常的另一个原因可能是使用解密逻辑的多个线程之间的竞争条件-ICryptoTransform的本机实现不是线程安全的(例如SymmetricAlgorithm),因此应将其放在独占部分,例如。使用锁。 是的,这是可以预料的,或者至少是当我们的加密例程获取不可解密的数据时发生的确切情况 CryptoStream中可能有一些未读字节。在完全读取流之前关闭会导致程序出错。 我有一个类似的问题,解密方法中的问题是初始化一个空的内存流。当我使用密文字节数组初始化它时,它何时起作用:
用户" atconway"更新的答案对我有用。
问题不在于填充,而是密钥,在加密和解密过程中密钥是不同的。 |
最新内容
相关内容
python如何错误追踪
python如何错误追踪,培训,异常,信息,错误,文件,日志,控制台,字符串,模块,后者,python中的traceback模块被用于跟踪异常返回信息,可以在loggingpython代码常见错误
python代码常见错误,代码,培训,平台,错误,空格,变量,赋值,制表符,属性,大小写,python常见的错误有:1.NameError变量名错误2.IndentationErrorpythonimport错误是什么原因
pythonimport错误是什么原因,培训,名称,代码,标准,函数,模块,语句,形式,程序,语法,python程序可以调用一组基本的函数(即内建函数),比如print(python断言错误怎么理解
python断言错误怎么理解,培训,代码,断言,程序,表达式,之间,错误,上面,年龄,过程,python的断言语句和if分支有点类似,它用于对一个bool表达式进pythonreturn语法错误怎么解决
pythonreturn语法错误怎么解决,培训,函数,语法错误,字符串,数值,使用说明,语句,定义,对象,以上,return语句是python语言中函数返回的一个值,每python单引号错误怎么办
python单引号错误怎么办,培训,嵌套,引号,字符,字符串,标志,错误,内容,末尾,代表性,在Python中...和"..."是完全一样的,但不能出现..."和".pythonPython错误有什么
pythonPython错误有什么,代码,培训,资料,平台,错误,空格,变量,赋值,制表符,属性,我们在写python代码时,有时候会遇到莫名的错误,而且查阅了很多python新手常犯错误有哪些
python新手常犯错误有哪些,代码,有限,培训,标准,项目,波浪,情况,冒号,错误,同学,下面总结新手学习python经常遇到的坑,需要的同学可以参考错误python错误类型有哪些
python错误类型有哪些,异常,系统,培训,错误,代码,标准,检测,类型,程序,逻辑,python的错误有语法错误和逻辑错误语法错误程序执行过程中,pythonpython报的错误怎么处理
python报的错误怎么处理,异常,代码,名称,检测,培训,状态,信息,项目,密码,语句,在编写Python代码或开发实际应用的项目时,程序报出异常或错误是python怎样忽略warning警告错误?
python怎样忽略warning警告错误?,培训,情况,代码,错误,模块,下面,之前,以上,程序,更多,python开发中经常遇到报错的情况,但是warning通常并不python异常和错误有什么区别
python异常和错误有什么区别,异常,检测,软件,培训,错误,发生,程序,程序员,逻辑,措施,1.错误从软件方面来说,错误是语法或是逻辑上的。语法错误