Maison > développement back-end > C++ > Pourquoi le décryptage de ma chaîne est-il interrompu après la mise à niveau de .NET 5 vers .NET 6 ?

Pourquoi le décryptage de ma chaîne est-il interrompu après la mise à niveau de .NET 5 vers .NET 6 ?

DDD
Libérer: 2025-01-04 07:52:34
original
322 Les gens l'ont consulté

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

Problème de décryptage lors de la mise à niveau vers .NET 6 : classe de chiffrement de chaîne

Dans un projet .NET 5, une classe de chiffrement de chaîne similaire à celle fournie comme solution a bien fonctionné. Cependant, lors de la mise à niveau vers .NET 6, la chaîne déchiffrée a été coupée à un moment précis.

Analyse du problème

La cause fondamentale réside dans un changement radical entre . NET 5 et .NET 6. Plus précisément, le comportement de DeflateStream, GZipStream et CryptoStream a divergé de celui des autres Stream types.

Résolution

Ce changement affecte la méthode Decrypt dans la classe de chiffrement. Auparavant, lors de l'appel de cryptoStream.Read, il était prévu que l'opération se termine uniquement lorsque le tampon était rempli ou que le flux atteignait sa fin. Cependant, dans .NET 6, cryptoStream.Read se termine désormais même si un seul octet a été lu ou si le flux sous-jacent renvoie 0, indiquant qu'aucune donnée supplémentaire n'est disponible.

Par conséquent, la méthode Decrypt doit être mise à jour pour gérer correctement ce comportement. Une solution consiste à vérifier combien d'octets cryptoStream.Read lit réellement et à s'assurer que toutes les données sont lues :

var plainTextBytes = new byte[cipherTextBytes.Length];
var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
Copier après la connexion

Alternativement, CopyTo ou StreamReader peut être utilisé pour un code plus efficace et plus concis :

using (var plainTextStream = new MemoryStream())
{
    cryptoStream.CopyTo(plainTextStream);
    var plainTextBytes = plainTextStream.ToArray();
    return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
}
Copier après la connexion
using (var plainTextReader = new StreamReader(cryptoStream))
{
    return plainTextReader.ReadToEnd();
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal