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 :
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 :
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(); }
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!