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
Freigeben: 2025-01-04 07:52:34
Original
335 Leute haben es durchsucht

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);
Nach dem Login kopieren

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);
}
Nach dem Login kopieren
using (var plainTextReader = new StreamReader(cryptoStream))
{
    return plainTextReader.ReadToEnd();
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage