Nyahsulit Isu Semasa Menaik taraf ke .NET 6: Kelas Penyulitan Rentetan
Dalam projek .NET 5, kelas penyulitan rentetan serupa dengan satu yang disediakan sebagai penyelesaian berfungsi dengan baik. Walau bagaimanapun, selepas menaik taraf kepada .NET 6, rentetan yang dinyahsulit telah terputus pada titik tertentu.
Analisis Masalah
Punca asasnya terletak pada perubahan terputus antara . NET 5 dan .NET 6. Secara khusus, gelagat DeflateStream, GZipStream dan CryptoStream telah menyimpang daripada itu jenis Strim lain.
Penyelesaian
Perubahan ini mempengaruhi kaedah Nyahsulit dalam kelas penyulitan. Sebelum ini, apabila memanggil cryptoStream.Read, operasi dijangka akan selesai hanya apabila penimbal telah diisi atau aliran mencapai penghujungnya. Walau bagaimanapun, dalam .NET 6, cryptoStream.Read kini lengkap walaupun hanya satu bait telah dibaca atau aliran asas mengembalikan 0, menunjukkan tiada lagi data tersedia.
Oleh itu, kaedah Decrypt perlu dikemas kini kepada mengendalikan tingkah laku ini dengan betul. Satu penyelesaian adalah untuk menyemak berapa banyak bait cryptoStream.Baca sebenarnya membaca dan memastikan semua data dibaca:
var plainTextBytes = new byte[cipherTextBytes.Length]; var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
Sebagai alternatif, CopyTo atau StreamReader boleh digunakan untuk kod yang lebih cekap dan ringkas:
using (var plainTextStream = new MemoryStream()) { cryptoStream.CopyTo(plainTextStream); var plainTextBytes = plainTextStream.ToArray(); return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length); }
using (var plainTextReader = new StreamReader(cryptoStream)) { return plainTextReader.ReadToEnd(); }
Atas ialah kandungan terperinci Mengapa Penyahsulitan Rentetan Saya Diputuskan Selepas Menaik taraf daripada .NET 5 kepada .NET 6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!