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

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

Barbara Streisand
Freigeben: 2025-01-01 09:52:09
Original
139 Leute haben es durchsucht

Why is my .NET 6 string decryption truncated after upgrading from .NET 5?

Problem beim Upgrade auf .Net 6 – Zeichenfolge verschlüsseln

Beim Upgrade eines Projekts von .Net 5 auf .Net 6 tritt ein Problem auf Problem beim Entschlüsseln von Zeichenfolgen mithilfe einer Verschlüsselungs-/Entschlüsselungsklasse. Das Ergebnis ist eine entschlüsselte Zeichenfolge, die abhängig von der Länge der Eingabezeichenfolge an einer bestimmten Stelle abgeschnitten wird.

Ursache

Eine Änderung im Verhalten streambezogener Klassen B. CryptoStream in .Net 6. In früheren Versionen haben diese Klassen alle Bytes aus dem Puffer gelesen oder das Ende des Streams erreicht, bevor der Lesevorgang abgeschlossen wurde. In .Net 6 werden sie abgeschlossen, nachdem mindestens ein Byte gelesen wurde oder nachdem von einem Leseaufruf aus dem zugrunde liegenden Stream 0 zurückgegeben wurde.

Betroffener Code

Das Problem tritt auf die Decrypt-Methode der Verschlüsselungsklasse, insbesondere beim Lesen entschlüsselter Bytes aus CryptoStream mithilfe eines Puffers behoben:

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

Lösung

Um das Problem zu beheben, ist es notwendig, die Anzahl der tatsächlich von CryptoStream gelesenen Bytes zu überprüfen und den Messwert entsprechend anzupassen. Dies kann durch Überprüfen der Length-Eigenschaft des MemoryStream nach dem Lesevorgang erfolgen.

Alternativ besteht ein besserer Ansatz darin, die CopyTo-Methode des CryptoStream zu verwenden oder einen StreamReader direkt über dem CryptoStream zu erstellen. Diese Ansätze stellen sicher, dass alle entschlüsselten Bytes gelesen und zurückgegeben werden:

// Usando CopyTo
using (var plainTextStream = new MemoryStream())
{
    cryptoStream.CopyTo(plainTextStream);
    var plainTextBytes = plainTextStream.ToArray();
    return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
}

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

Das obige ist der detaillierte Inhalt vonWarum wird meine .NET 6-String-Entschlüsselung nach dem Upgrade von .NET 5 abgeschnitten?. 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