Heim >Backend-Entwicklung >C++ >Warum wird meine String-Entschlüsselung nach dem Upgrade von .NET 5 auf .NET 6 unterbrochen?
Entschlüsselungsproblem beim Upgrade auf .NET 6: String-Verschlüsselungsklasse
In einem .NET 5-Projekt eine String-Verschlüsselungsklasse ähnlich der Eines, das als Lösung bereitgestellt wurde, hat gut funktioniert. Beim Upgrade auf .NET 6 wurde die entschlüsselte Zeichenfolge jedoch an einer bestimmten Stelle abgeschnitten.
Problemanalyse
Die grundlegende Ursache liegt in einem Breaking Change zwischen . NET 5 und .NET 6. Insbesondere unterscheidet sich das Verhalten von DeflateStream, GZipStream und CryptoStream von dem anderer Streams Typen.
Auflösung
Diese Änderung betrifft die Decrypt-Methode in der Verschlüsselungsklasse. Bisher wurde beim Aufruf von cryptoStream.Read erwartet, dass der Vorgang erst dann abgeschlossen wird, wenn der Puffer gefüllt ist oder der Stream sein Ende erreicht hat. In .NET 6 wird cryptoStream.Read jetzt jedoch auch dann abgeschlossen, wenn nur ein Byte gelesen wurde oder der zugrunde liegende Stream 0 zurückgibt, was darauf hinweist, dass keine Daten mehr verfügbar sind.
Daher muss die Decrypt-Methode auf aktualisiert werden Gehen Sie mit diesem Verhalten richtig um. Eine Lösung besteht darin, zu überprüfen, wie viele Bytes cryptoStream.Read tatsächlich liest, und sicherzustellen, dass alle Daten gelesen werden:
var plainTextBytes = new byte[cipherTextBytes.Length]; var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
Alternativ können CopyTo oder StreamReader für effizienteren und präziseren Code verwendet 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(); }
Das obige ist der detaillierte Inhalt vonWarum wird meine String-Entschlüsselung nach dem Upgrade von .NET 5 auf .NET 6 unterbrochen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!