.Net 6 では、カスタム暗号化クラスを使用して復号化された暗号化文字列が切断されるある時点で。これは、完全な復号化された文字列が返される .Net 5 で見られた動作とは異なります。
この不一致は、DeflateStream、GZipStream、そしてクリプトストリーム。以前は、これらのストリームは、読み取り操作に渡されたバッファが完全に満たされるか、ストリームの終わりに到達した場合にのみ読み取り操作を完了していました。
.Net 6 では、この動作が変更されました。読み取り操作は、少なくとも 1 バイトが読み取られたとき、または基になるストリームが 0 を返し、これ以上データが利用できないことを示したときに完了するようになりました。
提供されたコードでは、エラーが発生します。 Decrypt メソッドでは、実際に読み取られたバイト数を確認せずに Read メソッドが呼び出されます。これにより、復号化された文字列が切り詰められる可能性があります。
問題を修正するには、読み取られたバイト数を検証し、完全なストリームが確実に読み取られるようにする安全策をコードに組み込むことができます。別のアプローチは、データをデコードする前に、Stream.CopyTo メソッドを使用して、暗号化されたすべてのバイトを CryptoStream から別のメモリ ストリームに転送することです。
UTF8 テキストを復号化するためのさらに最適なソリューションは、StreamReader を使用することです。 ReadToEnd メソッド。ストリーム全体を文字列に読み取ります。
これらの対策を採用することで、開発者は正確な復号を保証できます。 .Net 6 の文字列を削除し、予期しない切り捨てを回避します。
以上が.NET 6 で復号化された文字列が切り詰められるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。