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 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