Heim >Backend-Entwicklung >C++ >Warum wird meine String-Entschlüsselung nach dem Upgrade von .NET 5 auf .NET 6 unterbrochen?

Warum wird meine String-Entschlüsselung nach dem Upgrade von .NET 5 auf .NET 6 unterbrochen?

DDD
DDDOriginal
2025-01-04 07:52:34320Durchsuche

Why is My String Decryption Cut Off After Upgrading from .NET 5 to .NET 6?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn