首頁 >後端開發 >C++ >為什麼我的 C# Rijndael 加密中出現「填充無效且無法刪除」異常?

為什麼我的 C# Rijndael 加密中出現「填充無效且無法刪除」異常?

Linda Hamilton
Linda Hamilton原創
2025-01-08 22:18:57753瀏覽

Why Am I Getting a

C# Rijndael 加密解密程式中的「填充無效且無法移除」異常

在密碼學領域,當嘗試解密使用 Rijndael 演算法加密的資料時,會出現「填充無效且無法移除」異常。此異常表示加密期間使用的填充與解密演算法的預期不符。

理解 Rijndael 中的填充

Rijndael(也稱為 AES)對固定大小的資料塊進行操作。當被加密的資料大小不能被區塊大小整除時,會使用填滿來填滿剩餘空間。此填充確保密文是一個有效、完整的區塊。

解密過程

在解密期間,演算法嘗試從密文中移除填滿。但是,如果填充與預期不匹配,則會引發“填充無效且無法移除”異常。這表示加密和解密演算法使用不同的填充方案。

解:明確指定填充

為了解決這個問題,必須明確指定加密和解密的填充方案。這可以使用以下程式碼完成:

<code class="language-csharp">// 加密
symmetricAlgorithm.Padding = PaddingMode.PKCS7;

// 解密
EncryptedXml exml = new EncryptedXml();
exml.Padding = PaddingMode.PKCS7;</code>

PKCS#7 填充

除非有使用不同填充方案的特定原因,否則建議使用 PKCS#7 填充。 PKCS#7(也稱為 OAEP(最佳非對稱加密填充))是一種廣泛支援且安全的填充演算法,可確保加密資料的完整性。

其他注意事項

  • 檢查加密和解密使用的金鑰大小是否相同。
  • 確保正確處理初始化向量 (IV)。
  • 使用支援使用 PKCS#7 填充的 Rijndael 加密的程式庫或框架,以簡化實作。

以上是為什麼我的 C# Rijndael 加密中出現「填充無效且無法刪除」異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn