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);
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(); }
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!