密码学中的无效填充
问题:
使用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中文网其他相关文章!