Bonjour,
je dois écrire un programme qui permet à deux processus de communiquer en utilisant les tubes nommés.Le message envoyé par le premier processus doit etre chiffré en utilisant aes et doit etre décrypté par le second processsus.
Le cryptage marche, mais le décryptage ne marche pas.
Voici mon code:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <openssl/aes.h>
#include <openssl/rand.h>
#include <fcntl.h>
 
 
 
 
 
void fils(int fd, unsigned char aes_key[],  int keylength,AES_KEY key,const size_t encslength,unsigned char iv_dec[]){
  unsigned char chaineAlire[8];
  read(fd,&chaineAlire, 8);
  unsigned char dec_out[8];
  memset(dec_out, 0, sizeof(dec_out));
 
  AES_set_decrypt_key(aes_key, keylength, &key);
  AES_DECRYPT);
  AES_cbc_encrypt(chaineAlire, dec_out, 8, &key, iv_dec, AES_DECRYPT);
  printf("message lu\t");
  printf("%s\n", dec_out);
  exit(EXIT_SUCCESS);
 
}
 
int main(int argc,char* argv[])
{
  int fd,f;
 
  int keylength=128;
  unsigned char aes_key[keylength/8];
  memset(aes_key, 0, keylength/8);
  if (!RAND_bytes(aes_key, keylength/8))
      exit(-1);
 
  size_t inputslength = 8;
  unsigned char aes_input[8]="bonjour";
  unsigned char iv_enc[AES_BLOCK_SIZE], iv_dec[AES_BLOCK_SIZE];
  RAND_bytes(iv_enc, AES_BLOCK_SIZE);
  memcpy(iv_dec, iv_enc, AES_BLOCK_SIZE);
  const size_t encslength = ((inputslength + AES_BLOCK_SIZE) / AES_BLOCK_SIZE) * AES_BLOCK_SIZE;
  unsigned char enc_out[encslength];
  unsigned char dec_out[inputslength];
  memset(enc_out, 0, sizeof(enc_out));
  memset(dec_out, 0, sizeof(dec_out));
  AES_KEY key;
  AES_set_encrypt_key(aes_key, keylength, &key);
  AES_cbc_encrypt(aes_input, enc_out, inputslength, &key, iv_enc, AES_ENCRYPT);
 
 
  if(mkfifo("essai", S_IRUSR|S_IWUSR) != 0)
    {
        perror( "Impossible de créer le tube nomme.\n");
 
        exit(EXIT_FAILURE);
    }
 
    if((fd= open("essai", O_RDWR)) == -1)
    {
        printf("Impossible d'ouvrir l'entrée du tube nomme.\n");
        exit(EXIT_FAILURE);
    }
 f=fork();
  if(f!=0){
    write(fd, &enc_out, 8);
        printf("message envoye:\t");
        printf("%s\n",aes_input );
        printf("message crypte:\t");
          hex_print(enc_out, sizeof(enc_out));
 
  }
if(f==0){
    fils(fd,aes_key,keylength,key,encslength,iv_dec);
 
}
close(fd);
 
return EXIT_SUCCESS;
}