.Net 6 へのアップグレード時の問題 - 文字列の暗号化
プロジェクトを .Net 5 から .Net 6 にアップグレードするときに問題が発生します暗号化/復号化クラスを使用した文字列の復号化に問題があります。結果は、入力文字列の長さに応じて、特定の時点で切断された復号化された文字列になります。
原因
ストリーム関連クラスの動作の変更.Net 6 の CryptoStream など。以前のバージョンでは、これらのクラスはバッファからすべてのバイトを読み取るか、読み取り操作が完了する前にストリームの終わりに到達しました。 .Net 6 では、少なくとも 1 バイトの読み取り後、または基になるストリームからの読み取り呼び出しから 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 中国語 Web サイトの他の関連記事を参照してください。