XmlDocument 加密中的无效填充异常
使用 Rijndael 算法解密 XmlDocument 时,可能会遇到异常“Padding is invalid and cannot be removed”。这表示 Rijndael 加密中使用的 数据加密标准 (DES) 与解密时应用的填充不兼容。
要解决此问题,务必确保加密和解密操作都使用相同的填充算法。问题出现的原因是 Rijndael(又名 AES)是一种分组密码,它以固定的 128 位块进行操作。
加密数据进行填充以确保最后一个块始终具有正确的尺寸。通过显式设置加密和解密的填充,您可以解决填充不匹配问题。除非对特定填充方法有特殊要求,否则建议使用行业标准 PKCS#7 填充。
以下是修改后的代码版本,其中显式设置了填充:
<code class="language-csharp">public void Cryptography(XmlDocument doc, bool cryptographyMode) { using (RijndaelManaged key = new RijndaelManaged()) { key.Padding = PaddingMode.PKCS7; // 显式设置 AES 128 填充模式 // ... 您的现有代码(需要进行必要的调整以设置填充)... if (cryptographyMode) { Encrypt(doc, "Content", key); } else { Decrypt(doc, key); } } // ... }</code>
通过使用 using
语句确保 RijndaelManaged
对象被正确释放,避免资源泄漏。 请注意,您需要根据您的现有代码调整 Encrypt
和 Decrypt
方法以正确处理 PKCS#7 填充。 这通常涉及到对加密和解密函数的输入和输出进行相应的修改。
以上是如何修复 Rijndael XML 解密中的'填充无效且无法删除”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!