Heim >Backend-Entwicklung >C++ >Warum schneidet meine .NET 6-Entschlüsselung in .NET 5 verschlüsselte Zeichenfolgen ab?
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:
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);
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); }
StreamReader.ReadToEnd() verwenden :
using (var plainTextReader = new StreamReader(cryptoStream)) { return plainTextReader.ReadToEnd(); }
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!