問題の概要:
.NET プロジェクトを .NET 6 に更新するときバージョン 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 中国語 Web サイトの他の関連記事を参照してください。