begin process at 2012 02 09 08:46:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > CRYPTER : VIGENÈRE/CÉSAR

CRYPTER : VIGENÈRE/CÉSAR


 Information sur la source

Note :
9,67 / 10 - par 6 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité & Cryptage Niveau :Débutant Date de création :13/08/2001 Vu :16 066

Auteur : fhr

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

 Description

Code une chaine de caractères (ou un fichier) avec un algo de Vigenère ou chiffrement de César, au choix et enregistre la clé et le résultat dans des fichiers.

Source

  • #include<stdio.h>
  • #include<stdlib.h>
  • #include<string.h>
  • #include<ctype.h>
  • void warning(void);
  • void error(void);
  • void Vigenere (void);
  • void Cesar (void);
  • char bidule[512] /*buffer de saisie*/;
  • char *nomcle /*nom du fichier ou est enregistree la cle*/, *nomcrypt/*nom du fichier ou est enregistre le resultat*/;
  • char *buffer /*string de depart*/, *falsemotcle /*cle pour copie dans fichier */, *motcle /*cle réellement utilisée*/,*crypto /*resultat*/;
  • int i,j;
  • int un=0, deux=0;
  • int choix, nombre;
  • FILE *cle=NULL,*crypt=NULL;
  • int main(int argc,char *argv[]) /* ex : fhcrypto Salut zorro 2 crypte.txt cle.txt donne : buffer = salut ,cle = salut,choix =2 (chiffrement de vigenère), nomcrypt = crypte.txt ,nomcle = cle.txt*/
  • { /* ou : fhcrypto Salut 3 1 crypte.txt cle.txt donne : buffer = salut ,cle = 3,choix =2 (chiffrement de césar), nomcrypt = crypte.txt ,nomcle = cle.txt*/
  • if(argc!=1 && argc !=6)
  • {
  • printf("Nombre d'arguments errone !\nFin du programme.");
  • exit(1);
  • }
  • if(argc==6)
  • strcpy(bidule,argv[1]);
  • else
  • {
  • printf("Saisie de la string a crypter : \n");
  • gets(bidule);
  • }
  • if(!(buffer = (char *) malloc (strlen(bidule))))
  • warning();
  • strcpy(buffer,bidule);
  • if(!(crypto = (char *) malloc (strlen(bidule))))
  • warning();
  • if(argc==6)
  • choix=atoi(argv[3]);
  • else
  • {
  • printf("Choisissez votre algorithme :\n\n\t_1 Chiffrement de Cesar.\n\n\t_2 Algorithme de Vigenere.\n");
  • scanf("%d", &choix);
  • getchar();
  • }
  • switch(choix)
  • {
  • default : while(isdigit(choix) && choix!=1 && choix !=2)
  • {
  • printf("Erreur de choix (refaites-le :\n");
  • scanf("%d", &choix);
  • getchar();
  • }
  • break;
  • case 1 :
  • if(argc==6)
  • {
  • nombre = atoi(argv[2]);
  • un = 1;
  • }
  • Cesar();
  • break;
  • case 2 : if(argc==6)
  • {
  • strcpy(bidule,argv[2]);
  • deux=1;
  • }
  • Vigenere();
  • }
  • printf("\n\n\nBuffer crypte = \n%s", crypto);
  • if(argc==6)
  • {
  • if(!(nomcrypt = (char *) malloc (strlen(argv[4]))))
  • warning();
  • strcpy(nomcrypt, argv[4]);
  • }
  • else
  • {
  • if(!(nomcrypt = (char *) malloc (256)))
  • warning();
  • printf("\n\n\nLe resultat du cryptage va etre enregistre dans un fichier.\nDonnez le nom du fichier (et eventuellement un chemin) :");
  • gets(nomcrypt);
  • }
  • crypt = fopen (nomcrypt, "w+");
  • if(!crypt)
  • error();
  • fprintf(crypt, "Resultat du cryptage. Le resultat est = \n%s",crypto);
  • fclose(crypt);
  • printf("\n\nResultat enregistre dans %s\n", nomcrypt);
  • if(argc==6)
  • {
  • if(!(nomcle = (char *) malloc (strlen(argv[5]))))
  • warning();
  • strcpy(nomcle, argv[5]);
  • }
  • else
  • {
  • if(!(nomcle = (char *) malloc (256)))
  • warning();
  • printf("\n\nLa cle (ou le nombre) va etre enregistre(e) dans un fichier.\nDonnez le nom du fichier (et eventuellement un chemin) :");
  • gets(nomcle);
  • }
  • cle = fopen (nomcle, "w+");
  • if(!cle)
  • error();
  • switch(choix)
  • {
  • case 1 : fprintf(cle, "Numero de l'algorithme. Le numero est = \n%i\nNombre de decryptage. Le nombre est = \n%i",choix,nombre);
  • break;
  • case 2: fprintf(cle, "Numero de l'algorithme. Le numero est = \n%i\nCle de decryptage. Le mot cle est = \n%s", choix,falsemotcle);
  • break;
  • }
  • fclose(cle);
  • printf("Cle enregistree dans %s\n", nomcle);
  • printf("Fin du programme");
  • if(argc==1)
  • getchar();
  • free(buffer);
  • free(crypto);
  • return 0;
  • }
  • void warning(void)
  • {
  • printf("Allocation memoire impossible !!\nFin du programme.");
  • getchar();
  • exit(1);
  • }
  • void error(void)
  • {
  • printf("Erreur d'ouverture du fichier.\nFin du programme.");
  • getchar();
  • exit(1);
  • }
  • void Vigenere (void)
  • {
  • if(!deux)
  • {
  • printf("Saisie de la cle : \n");
  • gets(bidule);
  • }
  • if(!(falsemotcle = (char *) malloc (strlen(bidule))))
  • warning();
  • strcpy(falsemotcle, bidule);
  • if(!(motcle = (char *) malloc (strlen(buffer))))
  • warning();
  • for(i=0,j=0;strlen(motcle) <strlen(buffer);motcle[j] = bidule[i], j++,i++)
  • if(i == strlen(bidule) )
  • i=0;
  • for(i=0;buffer[i]!='\0';crypto[i] = (buffer[i]+motcle[i])%256,i++)
  • ;
  • }
  • void Cesar (void)
  • {
  • if(!un)
  • {
  • printf("Saisie du nombre de decalage : \n");
  • scanf("%d", &nombre);
  • getchar();
  • }
  • for(i=0;buffer[i]!='\0';crypto[i] = (buffer[i]+nombre)%256,i++)
  • ;
  • }
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

void warning(void);
void error(void);
void Vigenere (void);
void Cesar (void);
char bidule[512] /*buffer de saisie*/;
char *nomcle /*nom du fichier ou est enregistree la cle*/, *nomcrypt/*nom du fichier ou est enregistre le resultat*/;
char *buffer /*string de depart*/, *falsemotcle /*cle pour copie dans fichier */, *motcle /*cle réellement utilisée*/,*crypto /*resultat*/;
int i,j;
int un=0, deux=0;
int choix, nombre;
FILE *cle=NULL,*crypt=NULL;


int main(int argc,char *argv[]) /* ex :  fhcrypto  Salut zorro  2 crypte.txt cle.txt     donne :  buffer = salut ,cle = salut,choix =2 (chiffrement de vigenère), nomcrypt = crypte.txt ,nomcle = cle.txt*/
{                               /* ou :  fhcrypto  Salut 3   1 crypte.txt cle.txt        donne :  buffer = salut ,cle = 3,choix =2 (chiffrement de césar), nomcrypt = crypte.txt ,nomcle = cle.txt*/





    if(argc!=1 && argc !=6)
    {
        printf("Nombre d'arguments errone !\nFin du programme.");
        exit(1);
    }

    if(argc==6)
        strcpy(bidule,argv[1]);

    else
    {
        printf("Saisie de la string a crypter : \n");
        gets(bidule);
    }


    if(!(buffer = (char *) malloc (strlen(bidule))))
        warning();
    strcpy(buffer,bidule);

    if(!(crypto = (char *) malloc (strlen(bidule))))
        warning();


    if(argc==6)
        choix=atoi(argv[3]);
    else
    {
    printf("Choisissez votre algorithme :\n\n\t_1 Chiffrement de Cesar.\n\n\t_2 Algorithme de Vigenere.\n");
    scanf("%d", &choix);
    getchar();
    }

    switch(choix)
    {
        default : while(isdigit(choix) && choix!=1 && choix !=2)
                  {
                      printf("Erreur de choix (refaites-le :\n");
                      scanf("%d", &choix);
                      getchar();
                  }
                  break;

        case 1 :
                 if(argc==6)
                 {
                 nombre = atoi(argv[2]);
                 un = 1;
                 }
                 Cesar();
                 break;
        case 2 : if(argc==6)
                 {
                 strcpy(bidule,argv[2]);
                 deux=1;
                 }
                 Vigenere();
    }

    printf("\n\n\nBuffer crypte = \n%s", crypto);




    if(argc==6)
    {
        if(!(nomcrypt = (char *) malloc (strlen(argv[4]))))
            warning();

        strcpy(nomcrypt, argv[4]);
    }
    else
    {
        if(!(nomcrypt = (char *) malloc (256)))
            warning();

        printf("\n\n\nLe resultat du cryptage va etre enregistre dans un fichier.\nDonnez le nom du fichier (et eventuellement un chemin) :");
        gets(nomcrypt);
    }

    crypt = fopen (nomcrypt, "w+");

    if(!crypt)
        error();

    fprintf(crypt, "Resultat du cryptage. Le resultat est = \n%s",crypto);
    fclose(crypt);
    printf("\n\nResultat enregistre dans %s\n", nomcrypt);

    if(argc==6)
    {
        if(!(nomcle = (char *) malloc (strlen(argv[5]))))
            warning();

        strcpy(nomcle, argv[5]);
    }
    else
    {
        if(!(nomcle = (char *) malloc (256)))
            warning();

        printf("\n\nLa cle (ou le nombre) va etre enregistre(e) dans un fichier.\nDonnez le nom du fichier (et eventuellement un chemin) :");
        gets(nomcle);

    }

    cle = fopen (nomcle, "w+");

    if(!cle)
        error();

    switch(choix)
    {
    case 1 : fprintf(cle, "Numero de l'algorithme. Le numero est = \n%i\nNombre de decryptage. Le nombre est = \n%i",choix,nombre);
             break;

    case 2:  fprintf(cle, "Numero de l'algorithme. Le numero est = \n%i\nCle de decryptage. Le mot cle est = \n%s", choix,falsemotcle);
             break;
    }
    fclose(cle);
    printf("Cle enregistree dans %s\n", nomcle);

    printf("Fin du programme");

    if(argc==1)
       getchar();




    free(buffer);
    free(crypto);
    return 0;


}

void warning(void)
{
    printf("Allocation memoire impossible !!\nFin du programme.");
    getchar();
    exit(1);
}
void error(void)
{
    printf("Erreur d'ouverture du fichier.\nFin du programme.");
    getchar();
    exit(1);
}

void Vigenere (void)
{

    if(!deux)
    {
        printf("Saisie de la cle : \n");
        gets(bidule);
    }
    if(!(falsemotcle = (char *) malloc (strlen(bidule))))
        warning();
    strcpy(falsemotcle, bidule);

    if(!(motcle = (char *) malloc (strlen(buffer))))
        warning();

    for(i=0,j=0;strlen(motcle) <strlen(buffer);motcle[j] = bidule[i], j++,i++)
        if(i == strlen(bidule) )
            i=0;


    for(i=0;buffer[i]!='\0';crypto[i] = (buffer[i]+motcle[i])%256,i++)
        ;
}

void Cesar (void)
{

    if(!un)
    {
        printf("Saisie du nombre de decalage : \n");
        scanf("%d", &nombre);
        getchar();
    }
    for(i=0;buffer[i]!='\0';crypto[i] = (buffer[i]+nombre)%256,i++)
        ;


} 



 Sources du même auteur

DECRYPTER : VIGENÈRE/CÉSAR
DECIMAL-&GT; TOUT !

 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 Merlin59 le 02/01/2003 21:37:21

Je pense qu'il y a plus simple comme façon de procéder, de même que si ca interresse, je vais poster un petit truc sur la sécurité de cet algorythme qui bien que vieux comme le monde et toujours très utilisé possède ennormement de faille

Commentaire de Guidelor le 13/02/2004 17:14:14

Lol je viens justement d'avoir un cour sur ca cet aprem à la fac !

Commentaire de W@$h! le 03/07/2004 17:46:11

Guidelor : t dans koi com fac pour kon te donne d cours la dessu?

Commentaire de Guidelor le 04/07/2004 16:45:38

bah j'suis en fac de bio..
et on a un cours d'introduction à l'informatique avec une grosse partie historique...

Commentaire de xunder le 26/09/2004 13:13:36

je ne c pa pour quoi vos codes sources ne sont pa en mode graphique

Commentaire de rob85 le 26/02/2005 03:20:21

simple, concis et clair !

Super !

@+ Rob

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,577 sec (4)

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