解決.Net 6 中的解密截止問題
從.Net 5 升級到.Net 6 時,會出現使用以下方式加密字串的問題與問題中提供的加密類別類似的加密類別在解密過程中被切斷。此問題僅在使用 .Net 6 時出現,導致以下行為:
輸入: "12345678901234567890"
. "12345678901234567890"
.NET 6 輸出: "1234567890123456"
長度差異非常明顯,其原因在於 .Net.Net 6.中與流的行為就像CryptoStream..Net 6 中的重大變更
從 .Net 6 開始,使用 Read() 或 ReadAsync()從流中讀取資料現在可以在以下任一情況下完成:滿足以下條件:解密程式碼的影響
在提供的程式碼中,Decrypt() 方法中的下列部分是不受影響:var plainTextBytes = new byte[cipherTextBytes.Length]; var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);在.Net 6 之前,CryptoStream的行為確保在操作被視為完成之前緩衝區已完全填滿或到達流的末端。但是,在 .Net 6 中不再出現這種情況,當解密緩衝區未完全填充時,可能會導致資料遺失。
解決方案
解決此問題,您可以修改Decrypt() 方法以確保所有位元組都正確閱讀:使用CopyTo()方法:
using (var plainTextStream = new MemoryStream()) { cryptoStream.CopyTo(plainTextStream); var plainTextBytes = plainTextStream.ToArray(); return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length); }
使用StreamReader.ReadToEnd():
using (var plainTextReader = new StreamReader(cryptoStream)) { return plainTextReader.ReadToEnd(); }
以上是為什麼我的 .NET 6 解密會切斷 .NET 5 中加密的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!