首頁 >後端開發 >C++ >為什麼 Rijndael 解密失敗並出現「無效填充」以及如何修復?

為什麼 Rijndael 解密失敗並出現「無效填充」以及如何修復?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-08 22:21:41290瀏覽

Why Does Rijndael Decryption Fail with

密碼學中的無效填充

問題:

使用Rijndael解密加密的XML文件時,遇到異常:「填充無效,無法移除」。

解答:

Rijndael(也稱為AES)是一種分組密碼,它以16個字元的區塊加密資料。填充用於確保訊息的最後一個區塊始終為適當的大小。

.NET中Rijndael的預設填充是PKCS#7填充。但是,問題中提供的程式碼沒有明確指定填滿模式,導致加密和解密操作之間出現差異。

要解決此問題,需要明確設定加密和解密的填滿模式。具體來說,應將RijndaelManaged物件的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中文網其他相關文章!

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