升級到.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中文網其他相關文章!