ホームページ > バックエンド開発 > C++ > .NET 6 にアップグレードすると、復号化された文字列が切り詰められるのはなぜですか?

.NET 6 にアップグレードすると、復号化された文字列が切り詰められるのはなぜですか?

Patricia Arquette
リリース: 2025-01-01 01:28:13
オリジナル
432 人が閲覧しました

Why Are My Decrypted Strings Truncated After Upgrading to .NET 6?

.NET 6 に更新した後の文字列暗号化の問題

問題の概要:

.NET プロジェクトを .NET 6 に更新するときバージョン 6 では、暗号化された文字列を復号すると、出力が部分的に切り詰められることが判明しました。元の入力に戻します。具体的には、復号化された文字列の一部が切り取られ、長さの差は一貫しています。

原因:

この問題は、.NET 6 の重大な変更が原因で発生します。 CryptoStream のようなストリーム。以前は、これらのストリームは、提供されたバッファ領域がすべて満たされるか、ストリームの終わりに達するまで読み取り操作を完了しないという独特の動作をしていました。

.NET 6 では、これらのストリームは他のストリームとより一貫して動作するようになりました。長さ N のバッファーを使用して読み取り操作が実行される場合、読み取り操作は次のいずれかの時点で完了します。

  • ストリームから少なくとも 1 バイトが読み取られるか、または
  • 基になるストリームが 0 を返します。独自の読み取り操作。

コード影響:

提供された暗号化/復号化コードでは、使用されている CryptoStream がこの変更を適切に考慮していません。具体的には、コードは、復号化プロセス中にすべてのバイトが読み取られて返されたかどうかのチェックに失敗します。

解決策:

問題を解決するには、コードを変更する必要があります。復号化中に利用可能なすべてのバイトを確実に読み取るためです。これは、次のいずれかのアプローチを使用して実現できます。

  • CopyTo の使用: このメソッドは、すべてのデータを CryptoStream から新しいバッファーに直接コピーし、すべてのバイトが読み取られることを保証します。 .
using (var plainTextStream = new MemoryStream())
{
    cryptoStream.CopyTo(plainTextStream);
    var plainTextBytes = plainTextStream.ToArray();
    return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
} 
ログイン後にコピー
  • を使用するStreamReader: プレーンテキストは UTF8 でエンコードされているため、StreamReader を使用して CryptoStream からデータを直接読み取るのが便利なソリューションです。
using (var plainTextReader = new StreamReader(cryptoStream))
{
    return plainTextReader.ReadToEnd();
}  
ログイン後にコピー

これらの修正を実装することで、コードは復号化されたすべてのバイトがキャプチャされ、出力文字列の一部として適切に返されること。

以上が.NET 6 にアップグレードすると、復号化された文字列が切り詰められるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート