密碼學中的無效填充
問題:
使用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中文網其他相關文章!