Problemzusammenfassung:
Beim Aktualisieren eines .NET-Projekts auf In Version 6 wurde festgestellt, dass die Entschlüsselung verschlüsselter Zeichenfolgen im Vergleich zur ursprünglichen Eingabe zu einer teilweise abgeschnittenen Ausgabe führt. Konkret wird ein Teil der entschlüsselten Zeichenfolge abgeschnitten, wobei der Längenunterschied konstant bleibt.
Ursache:
Das Problem ist auf eine bahnbrechende Änderung in .NET 6 zurückzuführen Streams wie CryptoStream. Zuvor verhielten sich diese Streams einzigartig und führten Lesevorgänge erst dann durch, wenn der gesamte bereitgestellte Pufferspeicher gefüllt oder das Ende des Streams erreicht war.
Mit .NET 6 verhalten sich diese Streams jetzt konsistenter mit anderen Streams. Wenn ein Lesevorgang mit einem Puffer der Länge N ausgeführt wird, wird er abgeschlossen, wenn entweder:
Code-Auswirkungen:
Im bereitgestellten Verschlüsselungs-/Entschlüsselungscode berücksichtigt der verwendete CryptoStream diese Änderung nicht ordnungsgemäß. Insbesondere prüft der Code nicht, ob während des Entschlüsselungsprozesses alle Bytes gelesen und zurückgegeben wurden.
Lösung:
Um das Problem zu beheben, muss der Code geändert werden um sicherzustellen, dass während der Entschlüsselung alle verfügbaren Bytes gelesen werden. Dies kann durch einen der folgenden Ansätze erreicht werden:
using (var plainTextStream = new MemoryStream()) { cryptoStream.CopyTo(plainTextStream); var plainTextBytes = plainTextStream.ToArray(); return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length); }
using (var plainTextReader = new StreamReader(cryptoStream)) { return plainTextReader.ReadToEnd(); }
Durch die Implementierung dieser Korrekturen stellt der Code sicher, dass alle entschlüsselten Bytes ordnungsgemäß erfasst werden wird als Teil der Ausgabezeichenfolge zurückgegeben.
Das obige ist der detaillierte Inhalt vonWarum werden meine entschlüsselten Zeichenfolgen nach dem Upgrade auf .NET 6 abgeschnitten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!