ホームページ > バックエンド開発 > C++ > Rijndael XML 復号化での「パディングが無効なので削除できません」例外を修正する方法は?

Rijndael XML 復号化での「パディングが無効なので削除できません」例外を修正する方法は?

DDD
リリース: 2025-01-08 22:26:43
オリジナル
683 人が閲覧しました

How to Fix

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート