| 12
 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
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 
 | int cryptage()
{
  char phraseDecrypter[101];
  char *phraseCrypter, remplacement;
  char **tableauCryptage, **tableauCryptageBis;
  int longueurCle = 0;
  int *cleCryptage, i, j, longueurChaine, n, saisieTemporaire, validationSaisie, x, y, z;
  int coordX, coordY;
  char algo [6] = {'A','D','F','G','V','X'};
  char algoCryptage[6][6] = {{'c','1','o','f','w','j'},
			     {'y','m','t','5','b','4'},
			     {'i','7','a','2','8','s'},
			     {'p','3','0','q','h','x'},
			     {'k','e','u','l','6','d'},
			     {'v','r','g','z','n','9'}};
 
  affichageCartouche();
  affichageCryptage();
 
  // Saisie par l'utilisateur de la phrase decrypter
  scanf("%s", &phraseDecrypter);
 
  // Vider la mémoire après la saisie utilisateur
  viderBuffer();
 
  affichageCartouche();
 
  // Boucle permettant de demander et vérifier la longueur de la clé (comprise entre 3 et 9)
  while (longueurCle < 3 || longueurCle > 9)
  {
    affichageCartouche();
    printf("La phrase a crypter est : %s\n\n", phraseDecrypter);
    printf("Quelle est la longueur n de la clé de cryptage, tel que : 2 < n < 10 : ");
    scanf("%d", &longueurCle);
 
    viderBuffer();
  }
 
  // Création d'un tableau dynamique pour contenir les nombres de la clé
  cleCryptage = (int*)calloc(longueurCle, sizeof(int));
 
  // Première boucle imbriquée parcourant cleCryptage afin de la remplir
  for (i = 0; i < longueurCle; i++)
  {
    // Deuxième boucle permettant de verifier que la saisie est comprise entre 2 et longueurCle
    while (cleCryptage[i] < 1 || cleCryptage[i] > longueurCle)
    {      
      // Affichage personnalisé
      if (i == 0)
      {
	printf("Saisie du 1er chiffre de la clé de cryptage : ");
      }
      else
      {
	printf("Saisie du %deme chiffre de la clé de cryptage : ", i+1);
      }
 
      // Saisie du chiffre
      scanf("%d", &saisieTemporaire);
      viderBuffer();
 
      // Troisième boucle vérifiant si la saisie n'existe pas deja dans la clé
      for (j = 0; j < longueurCle; j++)
      {
	if (saisieTemporaire == cleCryptage[j])
	{
	  validationSaisie = 1;
	}
      }
 
      // Si la saisie n'apparait pas dans la liste on peux ajouter le chiffre
      if(validationSaisie == 1)
      {
	cleCryptage[i] = 0;
      }
      else
      {
	cleCryptage[i] = saisieTemporaire;
      }
 
      // On re-initialise la variable validationSaisie à 0
      validationSaisie = 0;
    }
  }
 
  // Recapitulation
  affichageCartouche();
  printf("La phrase a crypter est : %s\n", phraseDecrypter);
  affichageCle(cleCryptage, longueurCle);
 
  // Calcul de la taille de la phrase Crypter
  longueurChaine = strlen(phraseDecrypter);
  longueurChaine = longueurChaine * 2;
 
  // Dans le cas où on ajoute des X pour completer la ligne
  while (longueurChaine % longueurCle != 0)
  {
    longueurChaine = longueurChaine+1;
  }
 
  // Creation dynamique d'une liste de caractaires contenant les coordonnées des lettres de la phrase
  phraseCrypter = (char *)calloc(longueurChaine, sizeof(char));
 
  // Remplissage de la précédante liste en fonction des coordonnées
  for (i = 0; i < longueurChaine; i++)
  {
    z = i;
    for (x = 0; x < 6; x++)
    {
      for (y = 0; y < 6; y++)
      {
	if (algoCryptage[x][y] == phraseDecrypter[i])
	{
	  while (phraseCrypter[z] != 0) // permet de vérifier qu'on ecrase pas une donnée deja mise
	  {
	    z++;
	  }
	  phraseCrypter[z] = algo[x];
	  phraseCrypter[z+1] = algo[y];
	}
      }
    }
  }
 
  // On parcours la phrase crypter à partir du dernier caractaire renseigné,le reste vaut forcecment 
  for (i = strlen(phraseDecrypter) * 2; i < longueurChaine; i++)
  {
    // On met X
    phraseCrypter[i] = algo[5];
  }
 
  // Création dynamique d'un tableau à 2 dimension qui va traiter les coordonnées avant permutation
  coordX = longueurCle;
  coordY = longueurChaine / longueurCle;
 
  tableauCryptage = (char **)calloc(coordX, sizeof(char));
  for (i = 0; i < coordX; i ++)
  {
    tableauCryptage[i] = (char *)calloc(coordY, sizeof(char));
  }
 
  z = 0;
  for (y = 0; y < coordY; y++)
  {
    for (x = 0; x < coordX; x++)
    {
      tableauCryptage[x][y] = phraseCrypter[z];  // C'est cette ligne qui me met erreur de segmentation
      z++;
    }
  } | 
Partager