IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème de décryptage avec Rijndael


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Par défaut Problème de décryptage avec Rijndael
    Bonjour a tous
    je réalise une application qui fait le cryptage/decryptage de données (images en particulier),pour cela j'utilise la classe Rijndael (algorithme AES),l'opération de cryptage se déroule tres bien,mais lors du décryptage l'erreur "Longueur des données à déchiffrer non valide" est générée
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public Rijndael AES = Rijndael.Create();
    AES.GenerateKey();
    AES.GenerateIV();
    Key = AES.Key;
    Iv = AES.IV;
    Cryptage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public byte[] Encrypt(byte[] In)
     
            {
     
                byte[] Out = new byte[In.Length];
                MemoryStream Temp = new MemoryStream(In);
                CryptoStream cStream = new CryptoStream(Temp, AES.CreateEncryptor(Key, Iv), CryptoStreamMode.Read);
                cStream.Read(Out, 0, In.Length );
                cStream.Close();
                return Out;
    ////////////////////////////////////////////////////////////////////////
    Décryptage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      public byte[] Decrypt(byte[] In)
            {
     
                byte[] Out = new byte[In.Length];
                MemoryStream Temp = new MemoryStream(In);
                CryptoStream cStream = new CryptoStream(Temp, AES.CreateDecryptor(Key, Iv), CryptoStreamMode.Read);
                cStream.Read(Out, 0, In.Length);
                cStream.Close();
                return Out;
            }
    Je vous remercie d'avance de votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    A mon avis,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cStream.Read(Out, 0, In.Length );
    est incorrect. La chaîne cryptée n'a pas forcément la même longueur que la chaîne en entrée (elle est probablement plus longue d'ailleurs). En utilisant cette ligne dans ton algorithme de chiffrage, tu perds probablement de l'information car la longueur de l'information est supérieure à In.Length et le contraire lors du déchiffrage.

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Par défaut
    A mon avis,

    Code :

    cStream.Read(Out, 0, In.Length );
    est incorrect. La chaîne cryptée n'a pas forcément la même longueur que la chaîne en entrée (elle est probablement plus longue d'ailleurs). En utilisant cette ligne dans ton algorithme de chiffrage, tu perds probablement de l'information car la longueur de l'information est supérieure à In.Length et le contraire lors du déchiffrage.
    j'ai verifié la longueur du bloc chiffré et c'est exactement la meme que celle du bloc en clair ( a l'entrée),donc y'a pas un bit de perdu ,par contre moi je suis perdu
    merci qd meme

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Bon alors,

    A mon avis, ton encryptage ne fait rien.

    J'ai retrouvé du code que j'avais écrit et c'est loin d'être la même chose. Le code utilise par contre RijndaelManaged mais ça revient au même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RijndaelManaged provider = new RijndaelManaged();
    provider.IV = ...
    provider.Key = ...
    Cryptage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public byte[] Encrypt(byte[] btext) {
       using (MemoryStream mstream = new MemoryStream()) {
          using (CryptoStream cstream = new CryptoStream(mstream, provider.CreateEncryptor(), CryptoStreamMode.Write)) {
             cstream.Write(btext, 0, btext.Length);
          }
          return mstream.ToArray();
       }
    }
    Décryptage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public byte[] Decrypt(byte[] btext) {
       using (MemoryStream mstream = new MemoryStream(btext)) {
          using (CryptoStream cstream = new CryptoStream(mstream, provider.CreateDecryptor(), CryptoStreamMode.Read)) {
              byte[] output = new byte[cstream.Length];
              cstream.Read(output, 0, output.Length);
              return output;
           }
       }
    }
    Mon code en fait prenait des string et retournait des string, j'ai tenté d'adapter pour des byte[] donc il se peut qu'il marche pas vraiment mais ça te permet de comprendre la cinématique d'utilisation des stream qui est incorrecte dans ton code (il se peut qu'il manque des trucs dans le décryptage, genre un stream intermédiaire pour lire dans le cstream).

  5. #5
    Membre averti
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Par défaut
    A mon avis, ton encryptage ne fait rien.
    non c'est faux , le cryptage marche tres tres bien.

    Quant a ton code de décryptage il est identique au mien!

    Merci qd meme mais je suis toujours bloqué.

Discussions similaires

  1. Décryptage d'un fichier avec Rijndael
    Par frearnaud dans le forum C#
    Réponses: 7
    Dernier message: 05/04/2017, 13h00
  2. Probléme de décryptage avec la clé publique
    Par vladvad dans le forum C#
    Réponses: 9
    Dernier message: 25/10/2007, 17h44
  3. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02
  4. [Kylix] problème compilation kylix3 avec redhat 9.0
    Par madininaoursa dans le forum EDI
    Réponses: 1
    Dernier message: 02/07/2003, 16h21
  5. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo