Rumah > pembangunan bahagian belakang > C++ > Mengapakah penyahsulitan rentetan .NET 6 saya dipenggal selepas menaik taraf daripada .NET 5?

Mengapakah penyahsulitan rentetan .NET 6 saya dipenggal selepas menaik taraf daripada .NET 5?

Barbara Streisand
Lepaskan: 2025-01-01 09:52:09
asal
136 orang telah melayarinya

Why is my .NET 6 string decryption truncated after upgrading from .NET 5?

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);
Salin selepas log masuk

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();
}
Salin selepas log masuk

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!

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