Dans .Net 6, les chaînes chiffrées déchiffrées à l'aide d'une classe de chiffrement personnalisée sont coupées à un certain point. Cela diffère du comportement observé dans .Net 5, où la chaîne déchiffrée complète a été renvoyée.
L'écart provient d'un changement radical dans .Net 6 affectant des flux comme DeflateStream, GZipStream, et CryptoStream. Auparavant, ces flux ne terminaient une opération de lecture que lorsque le tampon passé à l'opération de lecture était complètement rempli ou que la fin du flux était atteinte.
Dans .Net 6, ce comportement a changé. L'opération de lecture se termine désormais lorsqu'au moins un octet a été lu ou lorsque le flux sous-jacent renvoie 0, indiquant qu'aucune donnée n'est plus disponible.
Dans le code fourni, l'erreur se manifeste dans la méthode Decrypt, où la méthode Read est appelée sans vérifier le nombre d'octets réellement lus. Cela pourrait entraîner une chaîne déchiffrée tronquée.
Pour résoudre le problème, le code peut intégrer des protections pour vérifier le nombre d'octets lus et garantir que le flux complet est lu. Une approche alternative consiste à utiliser la méthode Stream.CopyTo pour transférer tous les octets chiffrés du CryptoStream vers un autre flux de mémoire avant de décoder les données.
Une solution encore plus optimale pour déchiffrer le texte UTF8 consiste à utiliser StreamReader. Méthode ReadToEnd, qui lit l'intégralité du flux dans une chaîne.
En adoptant ces mesures, les développeurs peuvent garantir le décryptage précis des chaînes dans .Net. 6 et évitez toute troncature inattendue.
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!