Masalah semasa menaik taraf kepada .Net 6 - Menyulitkan rentetan
Apabila menaik taraf projek daripada .Net 5 kepada .Net 6, masalah berlaku masalah menyahsulit rentetan menggunakan kelas penyulitan/penyahsulitan. Hasilnya ialah rentetan yang dinyahsulit terputus pada titik tertentu bergantung pada panjang rentetan input.
Punca
Perubahan dalam tingkah laku kelas berkaitan aliran seperti CryptoStream, dalam .Net 6. Dalam versi sebelumnya, kelas ini membaca semua bait daripada penimbal atau mencapai penghujung strim sebelum melengkapkan operasi baca. Dalam .Net 6, mereka melengkapkan selepas membaca sekurang-kurangnya satu bait atau selepas mengembalikan 0 daripada panggilan dibaca daripada strim asas.
Kod Terjejas
Masalah timbul dalam kaedah Nyahsulit kelas penyulitan, khususnya dalam membaca bait yang dinyahsulit daripada CryptoStream menggunakan penimbal tetap:
var plainTextBytes = new byte[cipherTextBytes.Length]; var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
Penyelesaian
Untuk menyelesaikan masalah, adalah perlu untuk menyemak bilangan bait yang sebenarnya dibaca oleh CryptoStream dan melaraskan bacaan dengan sewajarnya. Ini boleh dilakukan dengan menyemak sifat Length MemoryStream selepas operasi baca.
Sebagai alternatif, pendekatan yang lebih baik ialah menggunakan kaedah CopyTo CryptoStream atau mencipta StreamReader terus di atas CryptoStream. Pendekatan ini memastikan semua bait yang dinyahsulit dibaca dan dikembalikan:
// 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(); }
Atas ialah kandungan terperinci Mengapakah penyahsulitan rentetan .NET 6 saya dipenggal selepas menaik taraf daripada .NET 5?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!