暗号化のパディングが無効です
質問:
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 サイトの他の関連記事を参照してください。