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