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中文網其他相關文章!