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(最佳非對稱加密填充))是一種廣泛支援且安全的填充演算法,可確保加密資料的完整性。
其他注意事項
以上是為什麼我的 C# Rijndael 加密中出現「填充無效且無法刪除」異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!