問題摘要:
將.NET 專案更新為在版本6 中,人們發現與先前相比,加密字串的解密會導致輸出部分被截斷原始輸入。具體來說,解密字串的一部分被截斷,長度差異一致。
原因:
問題源自於影響 .NET 6 的重大變更像 CryptoStream 這樣的流。以前,這些流的行為獨特,直到所有提供的緩衝區空間被填滿或到達流末尾時才完成讀取操作。
使用 .NET 6,這些流現在與其他流的行為更加一致。如果使用長度為N 的緩衝區執行讀取操作,則在滿足以下任一條件時完成:
程式碼影響:
在提供的加密/解密程式碼中,正在使用的 CryptoStream 未正確考慮此變更。具體來說,程式碼無法檢查解密過程中是否已讀取並傳回所有位元組。
解決方案:
要解決此問題,需要修改程式碼以確保它在解密期間讀取所有可用位元組。這可以透過使用以下方法之一來實現:
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 6 後我的解密字串被截斷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!