Rumah > pembangunan bahagian belakang > C++ > Mengapa Rentetan Saya yang Dinyahsulit Dipenggal Selepas Menaik taraf kepada .NET 6?

Mengapa Rentetan Saya yang Dinyahsulit Dipenggal Selepas Menaik taraf kepada .NET 6?

Patricia Arquette
Lepaskan: 2025-01-01 01:28:13
asal
435 orang telah melayarinya

Why Are My Decrypted Strings Truncated After Upgrading to .NET 6?

Masalah dengan Menyulitkan Rentetan Selepas Kemas Kini ke .NET 6

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:

  • Sekurang-kurangnya satu bait dibaca daripada strim atau
  • Strim asas mengembalikan 0 daripada operasi bacanya sendiri.

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:

  • Menggunakan CopyTo: Kaedah ini menyalin terus semua data daripada CryptoStream ke penimbal baharu, menjamin semua bait dibaca .
using (var plainTextStream = new MemoryStream())
{
    cryptoStream.CopyTo(plainTextStream);
    var plainTextBytes = plainTextStream.ToArray();
    return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
} 
Salin selepas log masuk
  • Menggunakan StreamReader: Memandangkan plaintext dikodkan UTF8, menggunakan StreamReader untuk membaca data daripada CryptoStream secara langsung ialah penyelesaian yang mudah.
using (var plainTextReader = new StreamReader(cryptoStream))
{
    return plainTextReader.ReadToEnd();
}  
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan