Maison > développement back-end > C++ > Pourquoi mes chaînes déchiffrées sont-elles tronquées après la mise à niveau vers .NET 6 ?

Pourquoi mes chaînes déchiffrées sont-elles tronquées après la mise à niveau vers .NET 6 ?

Patricia Arquette
Libérer: 2025-01-01 01:28:13
original
429 Les gens l'ont consulté

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

Problème de chiffrement des chaînes après la mise à jour vers .NET 6

Résumé du problème :

Lors de la mise à jour d'un projet .NET vers Dans la version 6, il a été découvert que le déchiffrement des chaînes chiffrées aboutissait à une sortie partiellement tronquée par rapport à l'entrée d'origine. Plus précisément, une partie de la chaîne déchiffrée est coupée, la différence de longueur étant cohérente.

Cause :

Le problème provient d'un changement radical dans .NET 6 affectant des flux comme CryptoStream. Auparavant, ces flux se comportaient de manière unique en n'effectuant pas les opérations de lecture jusqu'à ce que tout l'espace tampon fourni soit rempli ou que la fin du flux soit atteinte.

Avec .NET 6, ces flux se comportent désormais de manière plus cohérente avec les autres flux. Si une opération de lecture est effectuée avec un tampon de longueur N, elle se termine lorsque :

  • Au moins un octet est lu à partir du flux, ou
  • Le flux sous-jacent renvoie 0 de sa propre opération de lecture.

Impact du code :

Dans le code de cryptage/déchiffrement, le CryptoStream utilisé ne tient pas correctement compte de ce changement. Plus précisément, le code ne parvient pas à vérifier si tous les octets ont été lus et renvoyés pendant le processus de décryptage.

Solution :

Pour résoudre le problème, le code doit être modifié pour s'assurer qu'il lit tous les octets disponibles pendant le décryptage. Ceci peut être réalisé en utilisant l'une des approches suivantes :

  • Utilisation de CopyTo : Cette méthode copie directement toutes les données du CryptoStream vers un nouveau tampon, garantissant que tous les octets sont lus .
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
  • Utilisation de StreamReader : Depuis le Le texte en clair est codé en UTF8, l'utilisation d'un StreamReader pour lire directement les données du CryptoStream est une solution pratique.
using (var plainTextReader = new StreamReader(cryptoStream))
{
    return plainTextReader.ReadToEnd();
}  
Copier après la connexion

En implémentant ces correctifs, le code garantira que tous les octets déchiffrés sont capturés et correctement renvoyé dans le cadre de la chaîne de sortie.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal