Heim > Backend-Entwicklung > C++ > Warum schneidet meine .NET 6-Entschlüsselung in .NET 5 verschlüsselte Zeichenfolgen ab?

Warum schneidet meine .NET 6-Entschlüsselung in .NET 5 verschlüsselte Zeichenfolgen ab?

Susan Sarandon
Freigeben: 2025-01-01 14:47:10
Original
1011 Leute haben es durchsucht

Why Does My .NET 6 Decryption Cut Off Strings Encrypted in .NET 5?

Fehlerbehebung beim Entschlüsselungs-Cutoff-Problem in .Net 6

Beim Upgrade von .Net 5 auf .Net 6 tritt ein Problem auf, bei dem Zeichenfolgen mit verschlüsselt werden Eine Verschlüsselungsklasse ähnlich der in der Frage angegebenen wird während der Entschlüsselung abgeschnitten. Dieses Problem tritt nur bei Verwendung von .Net 6 auf und führt zu folgendem Verhalten:

Eingabe: "12345678901234567890"

.NET 5-Ausgabe: „12345678901234567890“

.NET 6-Ausgabe: „1234567890123456“

Der Längenunterschied ist spürbar und die Ursache liegt in einer bahnbrechenden Änderung in .Net 6 im Zusammenhang mit das Verhalten von Streams wie CryptoStream.

Breaking Change in .Net 6

Ab .Net 6 wird das Lesen aus einem Stream mit Read() oder ReadAsync() nun abgeschlossen, wenn einer der Folgende Bedingungen sind erfüllt:

  1. Mindestens ein Byte wird aus dem Stream gelesen.
  2. Der zugrunde liegende Wert stream gibt 0 von einem Leseaufruf zurück, was darauf hinweist, dass keine Daten mehr verfügbar sind.

Auswirkungen auf den Entschlüsselungscode

Im bereitgestellten Code wird der folgende Abschnitt im Die Decrypt()-Methode ist davon nicht betroffen:

var plainTextBytes = new byte[cipherTextBytes.Length];
var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
Nach dem Login kopieren

Vor .Net 6 stellte das Verhalten von CryptoStream sicher, dass der Puffer vollständig gefüllt war oder das Ende des Streams wurde erreicht, bevor der Vorgang als abgeschlossen galt. Dies ist jedoch in .Net 6 nicht mehr der Fall, was zu einem möglichen Datenverlust führen kann, wenn der Entschlüsselungspuffer nicht vollständig gefüllt ist.

Lösung

Um dieses Problem zu beheben , können Sie die Decrypt()-Methode ändern, um sicherzustellen, dass alle Bytes ordnungsgemäß sind lesen:

  • CopyTo()-Methode verwenden:

    using (var plainTextStream = new MemoryStream())
    {
        cryptoStream.CopyTo(plainTextStream);
        var plainTextBytes = plainTextStream.ToArray();
        return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
    } 
    Nach dem Login kopieren
  • StreamReader.ReadToEnd() verwenden :

    using (var plainTextReader = new StreamReader(cryptoStream))
    {
        return plainTextReader.ReadToEnd();
    }  
    Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum schneidet meine .NET 6-Entschlüsselung in .NET 5 verschlüsselte Zeichenfolgen ab?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage