Decrypter : vigenère/césar

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 364 fois - Téléchargée 39 fois


Contenu du snippet

Permet de décoder un fichier codé avec mon prog "CRYPTER : VIGENERE/CESAR" avec le fichier codé et celui contenant la clé

Source / Exemple :


#include<conio.h>

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void warning (void);
void error (void);

int main(int argc,char *argv[]) /* ex :  fh decrypto  crypto.txt cle.txt     donne :  nomcrypt = crypto.txt, nomcle = cle.txt*/
{
    char *nomcrypt, *nomcle, *nomresult;
    char *crypto ,*decrypto, *motcle, *falsemotcle ;
    FILE *crypt, *cle, *result;
    char bidule [2000];
    int i=0,j, rep;
    int choix, nombre;
    char c='0';

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

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

    else
    {
        printf("Donnez le nom du fichier ou est contenu le resultat : ");
        gets(bidule);
    }

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

    if(!(crypt=fopen(nomcrypt, "r")))
        error();

    fseek(crypt, 42, 0);
    while((c= fgetc(crypt)) != EOF)
        i++;

    fseek(crypt, 42, 0);
    fgets(bidule, ++i, crypt);
    if(!(crypto = (char *) malloc (strlen(bidule))))
        warning();
    if(!(decrypto = (char *) malloc (strlen(bidule))))
        warning();
    strcpy(crypto,bidule);
    fclose(crypt);

    if(argc==3)
       strcpy(bidule,argv[2]);

    else
    {
        printf("Donnez le nom du fichier ou est contenue la cle : ");
        gets(bidule);
    }

    if(!(nomcle = (char *) malloc (strlen(bidule))))
        warning();
    strcpy(nomcle,bidule);
    if(!(cle=fopen(nomcle, "r")))
        error();

    fseek(cle,39,0);
    fscanf(cle,"%d", &choix);

    switch(choix)
    {
    case 1: fseek(cle,85,0);
            fscanf(cle,"%d", &nombre);

            for(i=0;crypto[i]!='\0';decrypto[i] = (crypto[i] - nombre)%256,i++)
                ;
            break;
    case 2: fseek(cle, 83, 0);
            i=0;
            while((c= fgetc(cle)) != EOF)
                i++;
            fseek(cle, 83, 0);
            fgets(bidule, ++i, cle);
            fclose(cle);

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

            if(!(motcle = (char *) malloc (strlen(crypto))))
                warning();
            for(i=0,j=0;strlen(motcle) <strlen(crypto);motcle[j] = bidule[i], j++,i++)
                if(i == strlen(bidule) )
                    i=0;

            for(i=0;crypto[i]!='\0';decrypto[i] = (crypto[i] - motcle[i])%256,i++)
                ;
            break;
    default: printf("\nErreur dans le fichier !. Fin du programme.");
             exit(1);
    }
    printf("\n\n\nResultat du decryptage = %s", decrypto);

    printf("\n\n\nVoulez enregistrer le resultat du decryptage dans un fichier (o/n) ?");
    if((rep = getch()) == 'o')
    {
        getchar();
        printf("Donnez le nom du fichier ou vous voulez enregistrer le resultat : ");
        gets(bidule);
        if(!(nomresult = (char *) malloc (strlen(bidule))))
            warning();
        strcpy(nomresult, bidule);
        if(!(result=fopen(nomresult, "w")))
            error();
        fprintf(result, "Resultat du decryptage. Le resultat est = \n%s", decrypto);
        fclose(result);
        printf("Resultat enregistre dans %s\n", nomresult);
    }
    printf("Fin du programme");
    getchar();

}

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

A voir également

Ajouter un commentaire

Commentaires

votre avis svp !
Sloft
Messages postés
6
Date d'inscription
mardi 13 juin 2000
Statut
Membre
Dernière intervention
12 juin 2008
-
Le décryptage ne marche pas correctement, les 2 derniers octets sont mals décryptés. Je n'ai jamais trouvé une source en c++ de decryptage qui fonctionne correctement. Facile de crypter, mais décrypter c toujours foireux !

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.