Ringkasan Masalah:
Apabila mengemas kini projek .NET ke versi 6, didapati bahawa penyahsulitan rentetan yang disulitkan menghasilkan sebahagian output terpenggal berbanding dengan input asal. Khususnya, sebahagian daripada rentetan yang dinyahsulit dipotong, perbezaan panjang adalah konsisten.
Punca:
Isu ini berpunca daripada perubahan pecah dalam .NET 6 yang menjejaskan aliran seperti CryptoStream. Sebelum ini, strim ini berkelakuan unik kerana tidak melengkapkan operasi baca sehingga semua ruang penimbal yang disediakan telah diisi atau penghujung strim dicapai.
Dengan .NET 6, strim ini kini berkelakuan lebih konsisten dengan strim lain. Jika operasi baca dilakukan dengan penimbal panjang N, ia selesai apabila sama ada:
Kod Kesan:
Dalam kod penyulitan/penyahsulitan yang disediakan, CryptoStream yang digunakan tidak mengambil kira perubahan ini dengan betul. Khususnya, kod gagal menyemak sama ada semua bait telah dibaca dan dikembalikan semasa proses penyahsulitan.
Penyelesaian:
Untuk menyelesaikan isu, kod perlu diubah suai untuk memastikan ia membaca semua bait yang tersedia semasa penyahsulitan. Ini boleh dicapai dengan menggunakan salah satu pendekatan berikut:
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(); }
Dengan melaksanakan pembetulan ini, kod akan memastikan bahawa semua bait yang dinyahsulit ditangkap dan dikembalikan dengan betul sebagai sebahagian daripada rentetan output.
Atas ialah kandungan terperinci Mengapa Rentetan Saya yang Dinyahsulit Dipenggal Selepas Menaik taraf kepada .NET 6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!