Rumah > pembangunan bahagian belakang > C++ > Mengapa Penyahsulitan .NET 6 Saya Memotong Rentetan Disulitkan dalam .NET 5?

Mengapa Penyahsulitan .NET 6 Saya Memotong Rentetan Disulitkan dalam .NET 5?

Susan Sarandon
Lepaskan: 2025-01-01 14:47:10
asal
1012 orang telah melayarinya

Why Does My .NET 6 Decryption Cut Off Strings Encrypted in .NET 5?

Menyelesaikan masalah Isu Potongan Penyahsulitan dalam .Net 6

Apabila menaik taraf daripada .Net 5 ke .Net 6, isu timbul apabila rentetan disulitkan menggunakan kelas penyulitan yang serupa dengan yang disediakan dalam soalan terputus semasa penyahsulitan. Isu ini hanya berlaku apabila menggunakan .Net 6, yang membawa kepada tingkah laku berikut:

Input: "12345678901234567890"

.NET 5 Output: "12345678901234567890"

.BERSIH 6 Output: "1234567890123456"

Perbezaan panjang ketara, dan puncanya berkaitan dengan pecahan .6 tingkah laku aliran seperti CryptoStream.

Memecahkan Perubahan dalam .Net 6

Bermula dari .Net 6, membaca daripada strim menggunakan Read() atau ReadAsync() kini selesai apabila salah satu daripada syarat berikut dipenuhi:

  1. Sekurang-kurangnya satu bait dibaca daripada strim.
  2. Strim asas mengembalikan 0 daripada panggilan dibaca, menunjukkan tiada lagi data tersedia.

Kesan pada Kod Penyahsulitan

Dalam kod yang disediakan, bahagian berikut dalam kaedah Decrypt() ialah tidak terjejas:

var plainTextBytes = new byte[cipherTextBytes.Length];
var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
Salin selepas log masuk

Sebelum .Net 6, gelagat CryptoStream memastikan penimbal telah diisi sepenuhnya atau penghujung strim dicapai sebelum operasi dianggap selesai. Walau bagaimanapun, ini tidak lagi berlaku dalam .Net 6, mengakibatkan potensi kehilangan data apabila penimbal penyahsulitan tidak diisi sepenuhnya.

Penyelesaian

Untuk menyelesaikan isu ini , anda boleh mengubah suai kaedah Decrypt() untuk memastikan semua bait adalah betul baca:

  • Gunakan Kaedah CopyTo():

    using (var plainTextStream = new MemoryStream())
    {
        cryptoStream.CopyTo(plainTextStream);
        var plainTextBytes = plainTextStream.ToArray();
        return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
    } 
    Salin selepas log masuk
  • Gunakan StreamReader.ReadToEnd() :

    using (var plainTextReader = new StreamReader(cryptoStream))
    {
        return plainTextReader.ReadToEnd();
    }  
    Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Penyahsulitan .NET 6 Saya Memotong Rentetan Disulitkan dalam .NET 5?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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