#include #include struct clefStatique { char encode[128]; char decode[128]; }; struct clefDynamique { char* encode; char* decode; }; void initialiserTableauEncodage(char* encode, int delta) { for (int i = 0; i < 128; i++) { encode[i] = (i + delta + 128) % 128; } } void initialiserTableauDecodage(char* decode, char* encode) { for (int i = 0; i < 128; i++) { decode[encode[i]] = (char) i; } } struct clefStatique creerClefStatique(int delta) { struct clefStatique cs; initialiserTableauEncodage(cs.encode, delta); initialiserTableauDecodage(cs.decode, cs.encode); return cs; } struct clefDynamique creerClefDynamique(int delta) { struct clefDynamique cd; cd.encode = (char*) calloc(128, sizeof(char)); if (cd.encode != NULL) { initialiserTableauEncodage(cd.encode, delta); } cd.decode = (char*) calloc(128, sizeof(char)); if (cd.decode != NULL) { initialiserTableauDecodage(cd.decode, cd.encode); } return cd; } void libererClefDynamique(struct clefDynamique cd) { if (cd.encode != NULL) { free(cd.encode); cd.encode = NULL; } if (cd.decode != NULL) { free(cd.decode); cd.decode = NULL; } } void main(void) { printf("Taille d'une clef statique : %zu octets\n", sizeof(struct clefStatique)); printf("Taille d'une clef dynamique : %zu octets\n", sizeof(struct clefDynamique)); printf("\n"); struct clefStatique cs = creerClefStatique(4); struct clefDynamique cd = creerClefDynamique(-6); printf("Taille de la clef cs : %zu octets\n", sizeof(cs)); printf("Taille de la clef cd : %zu octets\n", sizeof(cd)); printf("\n"); char c1 = 'A'; char ec1 = cs.encode[c1]; char dec1 = cs.decode[ec1]; printf("%c %c %c\n", c1, ec1, dec1); char c2 = 's'; char ec2 = cd.encode[c2]; char dec2 = cd.decode[ec2]; printf("%c %c %c\n", c2, ec2, dec2); libererClefDynamique(cd); printf("\n"); }