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);
       }