Bonjour a tous
Voici ma première source ;)
Elle permet de crypter un texte en utilisant l'algorithme de Cesar (déballage de n lettres sur tout le texte), n peut etre choisi par l'utilisateur ;)
Elle permet aussi de décrypter un texte crypter selon cette méthode
Le texte a crypter ou a décrypter doit être présent dans un fichier nommé readme.txt a la racine de la source compilée ;)
Lors du cryptage et du décryptage, le texte original est gardé
Pour le decryptage, toutes les possibilités (n=1 >> n=26) sont écrites dans le fichier readme.txt
Source / Exemple :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
#define TAILLE_MAX 500
void clean_stdin (void);
void pause (int);
char *openfichier()
{
static char str[2000] = "";
FILE* fichier = NULL;
char chaine[TAILLE_MAX] = "";
fichier = fopen("readme.txt", "r");
if (fichier != NULL)
{
printf ("\n---== Texte a crypter ==---\n\n\n");
while (fgets(chaine, TAILLE_MAX, fichier) != NULL)
{
strcat(str, chaine);
printf("%s", chaine);
}
printf ("\n\n\n---== Texte a crypter ==---");
fclose(fichier);
}
else
{
system("cls");
printf("\n\nImpossible d'ouvrir le fichier readme.txt\n\n");
pause (1);
exit(EXIT_FAILURE);
}
return str;
}
void cesar_crypt (int decallage, char *texte)
{
char c;
int decMin = decallage - 'a';
decallage -= 'A';
while(c = *texte)
{
if(c > 'z') goto nextCHR;
if(c < 'A') goto nextCHR;
if(c <= 'Z') goto goMAJ;
if(c < 'a') goto nextCHR;
c = 'a' + (c + decMin) % 26;
goto goREPLACE;
goMAJ:
c = 'A' + (c + decallage) % 26;
goREPLACE: *texte = c;
nextCHR: texte++;
}
}
int main(int argc, char *argv[])
{
int menu = 0;
printf("\n==== Menu ====\n\n\n");
printf("1. Cryptage\n\n");
printf("2. Decryptage\n\n");
printf("3. Quitter\n\n\n");
scanf("%d", &menu);
printf("\n");
if (menu == 1)
{
int decalage;
int crypter = 0;
FILE* fichier = NULL;
char *texte;
texte = openfichier();
system("cls");
printf ("\n\nUtiliser un decallage de combien de lettres pour crypter ce fichier ?\n\n");
scanf ("%d", &decalage);
printf ("\n\nVoulez-vous vraiment crypter ce texte en utilisant un decalage de %d lettres ?\n\n", decalage);
printf ("Ecrivez 1 pour Oui ou 0 pour Non\n\n");
scanf ("%d", &crypter);
if (crypter == 1)
{
system ("cls");
cesar_crypt (decalage, texte);
printf ("\n---== Texte apres chiffrement ==---\n\n\n");
printf ("%s\n", texte);
printf ("\n\n---== Texte apres chiffrement ==---\n\n");
fichier = fopen("readme.txt", "a+");
if (fichier != NULL)
{
fprintf(fichier, "\n\nTexte Crypte : \n\n%s", texte);
fclose(fichier);
}
pause (1);
}
else if (crypter == 0)
{
system ("cls");
printf ("\nAu revoir, et bonne journee\n\n");
pause (1);
}
else if (crypter < 0 || crypter > 1)
{
printf ("\nVeuillez entrer 0 ou 1\n\n");
scanf ("%d", &crypter);
while (crypter < 0 || crypter > 1)
{
printf ("\nVeuillez entrer 0 ou 1\n\n");
scanf ("%d", &crypter);
}
if (crypter == 1)
{
system ("cls");
cesar_crypt (decalage, texte);
printf ("\n---== Texte apres chiffrement ==---\n\n\n");
printf ("%s\n", texte);
printf ("\n\n---== Texte apres chiffrement ==---\n\n");
fichier = fopen("readme.txt", "a+");
if (fichier != NULL)
{
fprintf(fichier, "\n\nTexte Crypte : \n\n%s", texte);
fclose(fichier);
}
pause (1);
}
else if (crypter == 0)
{
system ("cls");
printf ("\nAu revoir, et bonne journee\n\n");
pause (1);
}
}
}
if (menu == 2)
{
int decalage = 26 ;
FILE* fichier = NULL;
char *texte;
texte = openfichier();
while (decalage > 0)
{
cesar_crypt (decalage, texte);
fichier = fopen("readme.txt", "a+");
if (fichier != NULL)
{
fprintf(fichier, "\n\n%s", texte);
fclose(fichier);
}
decalage--;
}
system("cls");
printf("\n\nDecryptage reussi, disponible dans le fichier readme.txt\n\n");
pause(1);
}
if (menu == 3)
{
getchar();
}
if (menu > 3 || menu < 1)
{
exit(EXIT_FAILURE);
}
}
void clean_stdin (void)
{
int c = 0;
do
{
c = getchar();
}
while (c != '\n' && c != EOF);
}
void pause (int b)
{
printf ("\nAppuyez sur Entrer pour quitter\n");
if (b==0)
getchar ();
else if (b==1)
{
clean_stdin ();
getchar ();
}
}
/*Merci a SoftEvans, Melem, Pouet_forever et Brunews*/
Conclusion :
Si vous avez des questions ou des améliorations sur cette source, n'hésitez pas ;)
Enjoy
Antoinejdu44
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.