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