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