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 Cryptage / Decryptage


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème Cryptage / Decryptage
    Bonjour je code un programme qui doit envoyer un fichier sur sur serveur tout en etant crypté. Sans le cryptage, j'arrive bien à envoyer et recevoir mais avec le cryptage j'ai un problème de donnée invalide...

    Il y un problème niveau de la fonction de decryptage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return tdes.CreateDecryptor(key, IV).TransformFinalBlock(toDecrypt, 0, toDecrypt.Length);
    --> Donnée invalide...

    Je suis bloqué depuis ce matin..Si qqun peut m'aider, ça serait bien cool Merci

    Fonction d'envoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    private bool sendBloc(long blocNumber, string filePath) {
                try {
                    FileStream fs = new FileStream(filePath, FileMode.Open);
                    BinaryReader br = new BinaryReader(fs);
                    fs.Position = blocNumber * settings.PacketSize;
                    byte[] byteToSend = encrypt(br.ReadBytes(settings.PacketSize));
                    //byte[] byteToSend = br.ReadBytes(settings.PacketSize);
                    Console.WriteLine(byteToSend.Length);
                    fs.Close();
     
                    TcpClient tcpC = new TcpClient(settings.DestinationAdress, settings.Port);
                    NetworkStream net = tcpC.GetStream();
                    net.Write(byteToSend, 0, byteToSend.Length);
                    net.Flush();
                    net.Close();
                    tcpC.Close();
                    return true;
                }
                catch (Exception exp) {
                    Console.WriteLine("Erreur à l'envoi du fichier " + filePath);
                    Console.WriteLine("Sur le bloc numéro " + blocNumber.ToString());
                    Console.WriteLine("Détails : " + exp.Message);
                    log("Erreur à l'envoi du bloc " + blocNumber.ToString() + " du fichier " + filePath + ". Détail : " + exp.Message, EventLogEntryType.Error); 
                    return false;
                }
            }

    Fonction de cryptage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            private byte[] encrypt(byte[] toCrypt) {
     
                TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
                tdes.IV = IV;
                tdes.Key = key;
                return tdes.CreateEncryptor(key, IV).TransformFinalBlock(toCrypt, 0, toCrypt.Length);
            }

    Fonction de reception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
      private void receiveBloc(int blocNumber, string directoryToSave, int size) {
     
               try
               {
                   Console.WriteLine("Attente du paquet");
                   tcpL.Start();
                   TcpClient tcpC2 = tcpL.AcceptTcpClient();
                   Console.WriteLine("Reception du paquet");
                   byte[] bytes = new byte[size];
                   NetworkStream network = tcpC2.GetStream();
                   FileStream fs = new FileStream("C:\\temp\\filetoreceive" + "\\guide" + ".pdf", FileMode.OpenOrCreate);
                   BinaryReader br = new BinaryReader(network);
                   BinaryWriter bw = new BinaryWriter(fs);
                   int nByteRead = 0;
                   fs.Position = blocNumber * size;
                   byte[] bytetoreceive = null;
     
                   while ((nByteRead = network.Read(bytes, 0, size)) > 0)
                   {
                       bytetoreceive = decrypt(bytes);
                       bw.Write(bytetoreceive, 0, nByteRead);
     
     
                   }
                   network.Flush();
                   network.Close();
                   fs.Flush();
                   fs.Close();
                   br.Close();
                   bw.Close();
                   tcpC2.Close();
     
               }
               catch (Exception exp)
               {
                   Console.WriteLine("Erreur lors de la reception d'un paquet du client: " + exp.Message);
                   log("Erreur lors de la reception d'un paquet du client : " + exp.Message, EventLogEntryType.Error);
               }
           }
    Fonction de decryptage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           private byte[] decrypt(byte[] toDecrypt) {
     
               TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
               tdes.IV = IV;
               tdes.Key = key;
               return tdes.CreateDecryptor(key, IV).TransformFinalBlock(toDecrypt, 0, toDecrypt.Length);
           }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je pense que c'est parce que tu passes toujours à la fonction decrypt un tableau de taille size, alors que quand tu arrives à la fin des données le tableau n'est pas forcément "plein" : il contient nByteRead octets et non size, mais comme tu passes le tableau entier et que tu utilises Length pour avoir le nombre d'octets, tu passes à TransformFinalBlock les derniers octets du tableau alors qu'il ne sont peut-être pas initialisés.

    2 solutions possibles :
    - tu passes nByteRead en paramètre de decrypt, et tu l'utilises à la place de toDecrypt.Length
    - tu passes une sous-partie de bytes à decrypt

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut, merci de ta réponse, j'ai essayé de passer bNyteRead ebn paramètre mais ça me fait une exception "CryptographicException" (Donnée invalide)

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'ai essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                   while ((nByteRead = network.Read(bytes, 0, size)) > 0)
                   {
                       bytetoreceive = decrypt(br.ReadBytes(nByteRead));
                       bw.Write(bytetoreceive, 0, nByteRead);
    
                   }
    mais toujours la même erreur.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je pense que tu n'as pas bien compris ce que je voulais dire... modifie la fonction decrypt de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           private byte[] decrypt(byte[] toDecrypt, int length) {
               TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
               tdes.IV = IV;
               tdes.Key = key;
               return tdes.CreateDecryptor(key, IV).TransformFinalBlock(toDecrypt, 0, length);
           }
    Et utilise la comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                   while ((nByteRead = network.Read(bytes, 0, size)) > 0)
                   {
                       bytetoreceive = decrypt(bytes, nByteRead);
                       bw.Write(bytetoreceive, 0, nByteRead);
                   }

  6. #6
    Invité
    Invité(e)
    Par défaut
    C'est ce que j'avais fait...mais je me retrouve toujours avec la même erreur.

Discussions similaires

  1. cryptage/decryptage, comment faire?
    Par bossun dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 24/04/2008, 17h07
  2. Cryptage/Decryptage de String
    Par aswat dans le forum Sécurité
    Réponses: 12
    Dernier message: 27/08/2007, 16h05
  3. Cryptage Decryptage asymetrique
    Par bslota dans le forum Sécurité
    Réponses: 5
    Dernier message: 02/05/2007, 16h15
  4. [VB]Cryptage/decryptage
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 25/01/2006, 18h57

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