Maison > développement back-end > C++ > Pourquoi mon décryptage .NET 6 coupe-t-il les chaînes chiffrées dans .NET 5 ?

Pourquoi mon décryptage .NET 6 coupe-t-il les chaînes chiffrées dans .NET 5 ?

Susan Sarandon
Libérer: 2025-01-01 14:47:10
original
1039 Les gens l'ont consulté

Why Does My .NET 6 Decryption Cut Off Strings Encrypted in .NET 5?

Dépannage du problème de coupure de décryptage dans .Net 6

Lors de la mise à niveau de .Net 5 vers .Net 6, un problème survient lorsque les chaînes sont chiffrées à l'aide une classe de cryptage similaire à celle fournie dans la question est coupée lors du décryptage. Ce problème se produit uniquement lors de l'utilisation de .Net 6, entraînant le comportement suivant :

Entrée : "12345678901234567890"

Sortie .NET 5 : "12345678901234567890"

.NET 6 Sortie : "1234567890123456"

La différence de longueur est perceptible et la cause réside dans un changement radical dans .Net 6 lié à le comportement des flux comme CryptoStream.

Rupture de changement dans .Net 6

À partir de .Net 6, la lecture d'un flux à l'aide de Read() ou ReadAsync() se termine désormais lorsque l'un des les conditions suivantes sont remplies :

  1. Au moins un octet est lu à partir du stream.
  2. Le flux sous-jacent renvoie 0 à partir d'un appel de lecture, indiquant qu'aucune donnée n'est plus disponible.

Impact sur le code de déchiffrement

Dans le code fourni, la section suivante de la méthode Decrypt() n'est pas affectée :

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

Avant .Net 6, le comportement de CryptoStream garantissait que le tampon était complètement rempli ou que la fin du flux était atteinte avant que l'opération ne soit considérée comme terminée. Cependant, ce n'est plus le cas dans .Net 6, ce qui entraîne une perte potentielle de données lorsque le tampon de décryptage n'est pas entièrement rempli.

Solution

Pour résoudre ce problème , vous pouvez modifier la méthode Decrypt() pour vous assurer que tous les octets sont correctement lus :

  • Utilisez Méthode CopyTo() :

    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
  • Utilisez StreamReader.ReadToEnd() :

    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
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