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

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

Barbara Streisand
リリース: 2025-01-01 09:52:09
オリジナル
163 人が閲覧しました

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

.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 サイトの他の関連記事を参照してください。

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