首頁 >後端開發 >C++ >為什麼從 .NET 5 升級到 .NET 6 後我的字串解密被切斷?

為什麼從 .NET 5 升級到 .NET 6 後我的字串解密被切斷?

DDD
DDD原創
2025-01-04 07:52:34314瀏覽

Why is My String Decryption Cut Off After Upgrading from .NET 5 to .NET 6?

升級到.NET 6 時的解密問題:字串加密類別

在.NET 5 專案中,類似於提供的一體種解決方案效果很好。然而,升級到 .NET 6 後,解密的字串在特定點被切斷。

問題分析

根本原因在於 .NET 之間的重大變更。 NET 5 和 .NET 6。具體來說,DeflateStream、GZipStream 和 CryptoStream 的行為與其他 Stream 的行為有所不同類型。

解析度

此變更會影響加密類別中的 Decrypt 方法。先前,當呼叫 cryptoStream.Read 時,預計僅當緩衝區已滿或流到達末尾時操作才會完成。然而,在 .NET 6 中,即使只讀取了一個位元組或底層流回傳 0(表示沒有更多資料可用),cryptoStream.Read 現在也會完成。

因此,Decrypt 方法需要更新為妥善處理這種行為。一種解決方案是檢查cryptoStream.Read 實際讀取了多少位元組並確保讀取了所有資料:

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

或者,可以使用CopyTo 或StreamReader 來獲得更有效率、簡潔的程式碼:

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

以上是為什麼從 .NET 5 升級到 .NET 6 後我的字串解密被切斷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn