Heim >Backend-Entwicklung >C++ >Warum werden meine entschlüsselten Zeichenfolgen nach dem Upgrade auf .NET 6 abgeschnitten?

Warum werden meine entschlüsselten Zeichenfolgen nach dem Upgrade auf .NET 6 abgeschnitten?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-01 01:28:13426Durchsuche

Why Are My Decrypted Strings Truncated After Upgrading to .NET 6?

Problem mit der Verschlüsselung von Zeichenfolgen nach dem Update auf .NET 6

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:

  • mindestens ein Byte aus dem Stream gelesen wird oder
  • Der zugrunde liegende Stream 0 zurückgibt seine eigene Leseoperation.

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:

  • Mit CopyTo: Diese Methode kopiert alle Daten direkt aus dem CryptoStream in einen neuen Puffer und garantiert so, dass alle Bytes gelesen werden .
using (var plainTextStream = new MemoryStream())
{
    cryptoStream.CopyTo(plainTextStream);
    var plainTextBytes = plainTextStream.ToArray();
    return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
} 
  • Verwenden von StreamReader: Da der Klartext ist UTF8-kodiert, die Verwendung eines StreamReaders zum direkten Lesen der Daten aus dem CryptoStream ist eine praktische Lösung.
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!

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