ホームページ > バックエンド開発 > C++ > Rijndael 復号化が「無効なパディング」で失敗する理由とその修正方法は?

Rijndael 復号化が「無効なパディング」で失敗する理由とその修正方法は?

Mary-Kate Olsen
リリース: 2025-01-08 22:21:41
オリジナル
298 人が閲覧しました

Why Does Rijndael Decryption Fail with

暗号化のパディングが無効です

質問:

Rijndael を使用して暗号化された XML ドキュメントを復号化すると、「パディングが無効なので削除できません」という例外が発生しました。

答え:

Rijndael (AES とも呼ばれる) は、16 文字のブロックでデータを暗号化するブロック暗号です。パディングは、メッセージの最後のチャンクが常に適切なサイズになるようにするために使用されます。

.NET の Rijndael のデフォルトのパディングは PKCS#7 パディングです。ただし、質問で提供されているコードではパディング モードが明示的に指定されていないため、暗号化操作と復号化操作の間に不一致が生じます。

この問題を解決するには、暗号化と復号化のパディング モードを明示的に設定する必要があります。具体的には、RijndaelManaging オブジェクトの 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 中国語 Web サイトの他の関連記事を参照してください。

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