首页 >后端开发 >C++ >为什么 Rijndael 解密失败并出现'无效填充”以及如何修复?

为什么 Rijndael 解密失败并出现'无效填充”以及如何修复?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-08 22:21:41290浏览

Why Does Rijndael Decryption Fail with

密码学中的无效填充

问题:

使用Rijndael解密加密的XML文档时,遇到异常:“填充无效,无法移除”。

解答:

Rijndael(也称为AES)是一种分组密码,它以16个字符的块加密数据。填充用于确保消息的最后一个块始终为适当的大小。

.NET中Rijndael的默认填充是PKCS#7填充。但是,问题中提供的代码没有明确指定填充模式,导致加密和解密操作之间出现差异。

要解决此问题,需要显式设置加密和解密的填充模式。具体来说,应将RijndaelManaged对象的Padding属性设置为PaddingMode.PKCS7。

以下是包含显式设置填充的修改后的代码片段:

<code class="language-csharp">public void Cryptography(XmlDocument doc, bool cryptographyMode)
{
    RijndaelManaged key = null;
    try
    {
        // 创建一个新的Rijndael密钥。
        key = new RijndaelManaged()
        {
            Padding = PaddingMode.PKCS7 //显式设置PKCS7填充模式
        };
        // ... 代码其余部分保持不变 ...
    }
    catch (Exception ex)
    {
        // ... 异常处理保持不变 ...
    }
    finally
    {
        // ... 密钥清理保持不变 ...
    }
}</code>

通过显式设置填充模式,可以确保加密和解密过程使用相同的填充机制,从而解决与填充相关的异常。 这避免了由于填充模式不一致导致的解密失败。

以上是为什么 Rijndael 解密失败并出现'无效填充”以及如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn