begin process at 2012 05 27 15:18:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > CRYPTER-DECRYPTER EN UTILISANT L'ALGORITHME DE CESAR

CRYPTER-DECRYPTER EN UTILISANT L'ALGORITHME DE CESAR


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité & Cryptage Classé sous :Cesar, Algorithme Cesar, Cryptage Cesar, Decryptage Cesar Niveau :Débutant Date de création :29/12/2009 Date de mise à jour :23/01/2010 20:35:04 Vu / téléchargé :6 204 / 254

Auteur : Antoinejdu44

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

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

  • #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*/
#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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

05 janvier 2010 14:38:26 :
Optimisation du code Merci a Brunews
05 janvier 2010 14:42:13 :
Optimisation du code, merci a Brunews
23 janvier 2010 20:35:04 :
Oubli de la variable du choix de l'user lors du cryptage

 Sources de la même categorie

PROJET DE CRYPTOGRAPHIE: RSA À JEU REDUIT D'INSTRUCTION par samatarahmed
Source avec Zip Source avec une capture CRYPTOSYSTÈME ELGAMAL LIBRAIRIE GMP par louelh95
Source avec Zip Source .NET (Dotnet) NOUVEL ALGORITHME D'ENCRYPTION-DÉSENCRYPTION DYNAMIQUE (INFA... par vletktol
Source avec Zip A2DCRYPT - CRYPTAGE 2048 BITS par darkor
Source avec Zip Source avec une capture CRYPTEUR-DÉCRYPTEUR-IP par antho974

Commentaires et avis

Commentaire de ghuysmans99 le 30/12/2009 00:27:19

La série des "if (menu == X)" peut être remplacée par un switch.
"else if (crypter == 0) " n'a aucun sens : si crypter est booléen et qu'il ne vaut pas 1, il vaut 0 !

Commentaire de BruNews le 30/12/2009 09:46:07 administrateur CS

C'est dans l'autre sens, un indicateur vaut 0 pour FAUX ou nimporte quoi d'autre sera VRAI.

Comme pour toutes les "Cesaritudes" qu'on a sur cppfrance et qui proposent les mêmes défauts de débutants:
for(i=0 ; i<strlen(texte) ; i++)
NON et NON, tu ne modifies pas la longueur, il est donc improductif de la recalculer à chaque tour. On peut ajouter qu'il est totalement inutile de parcourir la chaine 2 fois:
char a;
while(a = *texte) {
  // TU TRAITES ICI
  *texte++;
}

Commentaire de Antoinejdu44 le 30/12/2009 13:11:40

Merci de vos commentaires ;)

@ghuysmans99 : J'ai essayé de mettre un switch, mais je ne pouvais compiler (erreur de type : "" non-declaré)
@brunew : Je vais corriger avec ce que tu me dis, merci ;)

Commentaire de BruNews le 30/12/2009 14:07:59 administrateur CS

OUPS a la relecture:
char a;
while(a = *texte) {
  // TU TRAITES ICI
  texte++;
}

et non pas *texte++ comme dit dans comment précédent.

Commentaire de Antoinejdu44 le 05/01/2010 11:06:43

Si j'ai bien compris, je dois remplacer
for(i=0 ; i<strlen(texte) ; i++)

par

char i;
while(i = *texte) {

puis mettre

if ('a' <= texte[i] && texte[i] <= 'z')
texte[i] = 'a' + ((texte[i] - 'a') + decallage)%26;
else

if ('A' <= texte[i] && texte[i] <= 'Z')
texte[i] = 'A' + ((texte[i] - 'A') + decallage)%26;
else
{
}  
et après

  texte++;
}

C'est sa ?

Commentaire de BruNews le 05/01/2010 14:02:53 administrateur CS

Il n'y a plus notion d'itérateur "texte[i]" puisqu'on déplace le pointeur.

Un truc dans ce genre:
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++;
  }
}

Commentaire de Antoinejdu44 le 05/01/2010 14:21:06

Okey, merci, j'avais pas compris le
// tu traites ici
dans ton code ^^

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Cryptage-Cesar [ par TrD_ ] Bon je viens en dernier recours, je tente de créer une librarie de cryptage mais évidement sa ne marche pas !//beginif((buffer[i] &gt;= 'A') &amp;&amp Probleme pour un programme (jule cesar) [ par skill59 ] Bonsoir à tous, Voici mon programme: // Codage Jules César #include #include using namespace std; int main() { int i,longueur; string cla chiffrement de césar [ par adelkaraani ] concevez un programme cesar qui implémente le chiffrement de cesar -entree:un fichier et un décalage -sortie:le fichier chiffre


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales