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
Patricia Arquetteasal
2025-01-01 01:28:13473semak imbas

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);
} 
  • 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();
}  

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:
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