Ungültige Auffüllung in der Kryptographie
Frage:
Bei der Verwendung von Rijndael zum Entschlüsseln eines verschlüsselten XML-Dokuments ist eine Ausnahme aufgetreten: „Padding ist ungültig und kann nicht entfernt werden“.
Antwort:
Rijndael (auch bekannt als AES) ist eine Blockverschlüsselung, die Daten in 16-Zeichen-Blöcken verschlüsselt. Durch Auffüllen wird sichergestellt, dass der letzte Teil einer Nachricht immer die richtige Größe hat.
Die Standardauffüllung für Rijndael in .NET ist PKCS#7-Auffüllung. Der in der Frage bereitgestellte Code gibt jedoch den Auffüllmodus nicht explizit an, was zu Diskrepanzen zwischen Verschlüsselungs- und Entschlüsselungsvorgängen führt.
Um dieses Problem zu beheben, muss der Auffüllmodus für die Ver- und Entschlüsselung explizit festgelegt werden. Insbesondere sollte die Padding-Eigenschaft des RijndaelManaged-Objekts auf PaddingMode.PKCS7 festgelegt werden.
Hier ist ein modifizierter Codeausschnitt, der das explizite Festlegen von Auffüllungen beinhaltet:
<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>
Durch explizites Festlegen des Auffüllmodus können Sie sicherstellen, dass die Verschlüsselungs- und Entschlüsselungsprozesse denselben Auffüllmechanismus verwenden, wodurch auffüllbezogene Ausnahmen behoben werden. Dadurch werden Entschlüsselungsfehler aufgrund inkonsistenter Füllmuster vermieden.
Das obige ist der detaillierte Inhalt vonWarum schlägt die Rijndael-Entschlüsselung wegen „Ungültiger Auffüllung' fehl und wie kann das Problem behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!