Blame view

src/vigenere.c 1.38 KB
17ba8f8f   tevrard   Ajout du code
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
  #include <stdio.h>
  #include<stdlib.h>
  #include <ctype.h>
  #include <string.h>
  #include "../inc/vigenere.h"
  
  char * message;
  char * cle;
  int tailleCle;
  
  
  /* Fonction de chiffrement ou déchiffrement Vigenere
     Chiffre/Dechifffe le char *message avec la char *cle de taille int tailleCle
     Si int encode = 1 -> chiffrement, Si int encode = 0 -> dechiffre */
  void vigenere(unsigned char *message, unsigned char *cle, int tailleCle, int encode)
  {
     int iCle = 0;
  
     /* Parcours du message */
     for (int iMsg = 0; message[iMsg] != '\0'; iMsg++) {
  
        /* Si notre caractère est un caractère alphanumérique */
        if(isalpha(message[iMsg])) {
           char casse, lettreCle;
  
           //casse = 'A' si 'A' < message[iMsg] < 'Z'
           //casse = 'a' si 'a' < message[iMsg] < 'z'
           casse = (isupper(message[iMsg])) ? 'A' : 'a';
           lettreCle = tolower(cle[iCle]) - 'a';
           iCle = (iCle + 1) % tailleCle;
  
           /* On se ramène à des lettres codées dans [0:26] pour pouvoir appliqué les formules suivantes */
           message[iMsg] -= casse;
           if (encode) message[iMsg] = ((message[iMsg] + lettreCle) % 26+ 26) % 26; // CHIFFREMENT
           else message[iMsg] = ((message[iMsg] - lettreCle) % 26 + 26) % 26;       // DECHIFFREMENT
  
           /* On rétablie le code ascii (65 à 90 pour les majuscule, 97 à 122 pour les minuscules) */
           message[iMsg] += casse;
        }
     }
  }