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

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

Barbara Streisand
發布: 2025-01-01 09:52:09
原創
164 人瀏覽過

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

升級到.Net 6 時出現問題- 加密字串

將項目從.Net 5 升級到.Net 6 時出現問題使用加密/解密類別解密字串時出現問題。結果是根據輸入字串的長度在某一點截斷的解密字串。

原因

流相關類別的行為變化例如 .Net 6 中的 CryptoStream。在先前的版本中,這些類別在完成讀取操作之前從緩衝區讀取所有位元組或到達流的末尾。在 .Net 6 中,它們在讀取至少一個位元組後或從底層流的讀取呼叫返回 0 後完成。

受影響的程式碼

問題出現在加密類別的 Decrypt 方法,特別是使用緩衝區從 CryptoStream讀取解密的位元組已修復:

var plainTextBytes = new byte[cipherTextBytes.Length];
var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
登入後複製

解決方案

要解決該問題,需要檢查CryptoStream 實際讀取的位元組數並相應調整讀取。這可以透過在讀取操作後檢查 MemoryStream 的 Length 屬性來完成。

或者,更好的方法是使用 CryptoStream 的 CopyTo 方法或直接在 CryptoStream 之上建立 StreamReader。這些方法確保讀取並傳回所有解密的位元組:

// 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();
}
登入後複製

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板