XmlDocument 暗号化における無効なパディング例外
Rijndael アルゴリズムを使用して XmlDocument を復号化すると、「パディングが無効なので削除できません」という例外が発生する場合があります。これは、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
オブジェクトが正しく解放されていることを確認します。 PKCS#7 パディングを適切に処理するには、Encrypt
メソッドと Decrypt
メソッドを既存のコードに適合させる必要があることに注意してください。 これには通常、暗号化関数と復号化関数の入力と出力に対応する変更を加えることが含まれます。
以上がRijndael XML 復号化での「パディングが無効なので削除できません」例外を修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。