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

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

DDD
リリース: 2025-01-04 07:52:34
オリジナル
324 人が閲覧しました

Why is My String Decryption Cut Off After Upgrading from .NET 5 to .NET 6?

.NET 6 へのアップグレード時の復号化の問題: 文字列暗号化クラス

.NET 5 プロジェクトでは、ソリューションとして提供されたものはうまく機能しました。ただし、.NET 6 にアップグレードすると、復号化された文字列が特定の時点で切断されました。

問題分析

根本的な原因は、.NET 間の破壊的な変更にあります。 NET 5 および .NET 6。具体的には、DeflateStream、GZipStream、および CryptoStream の動作が他の Stream の動作と異なっています。

解像度

この変更は、暗号化クラスの Decrypt メソッドに影響します。以前は、cryptoStream.Read を呼び出す場合、バッファがいっぱいになるか、ストリームが最後に到達したときにのみ操作が完了すると予想されていました。ただし、.NET 6 では、1 バイトだけが読み取られた場合や、基になるストリームが 0 を返し、これ以上データが利用できない場合でも、cryptoStream.Read が完了するようになりました。

したがって、Decrypt メソッドを次のように更新する必要があります。この行為に適切に対処してください。解決策の 1 つは、cryptoStream.Read が実際に読み取るバイト数をチェックし、すべてのデータが読み取られることを確認することです:

var plainTextBytes = new byte[cipherTextBytes.Length];
var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
ログイン後にコピー

あるいは、CopyTo または StreamReader を使用して、より効率的で簡潔なコードを作成できます:

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 5 から .NET 6 にアップグレードした後、文字列の復号化が中断されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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