Annonce

Réduire
Aucune annonce.

[c] xor encryptor/decryptor

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [c] xor encryptor/decryptor

    Bonjour à tous,

    Voici un tool que je me suis codé cette nuit, c'est un code simple qui ne fait que XORé la chaîne qu'on lui envoie avec une clé qu'on choisira, même si il existe plein de tools sur le net je préfère faire les miens ; pour deux raisons simples:

    -Ne pas être dépendant
    -M'entraîner

    Place au code, (j'avoue c'est un peu dégeulasse):

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAXBUFFERSIZE 1024
    
    void encrypt(char *C,int B);
    void decrypt(char *C,int B);
    int main()
    {
        char *buffer;
        buffer=(char *)malloc(MAXBUFFERSIZE * sizeof(char));
        int B;
        int choice;
    
            printf("????????????????????????????????????????????????????????????????????????????\n");
            printf("?                         SIMPLE XOR ENCRYPT/DECRYPT by  EpicOut           ?\n");
            printf("????????????????????????????????????????????????????????????????????????????\n");
            printf("\n");
            printf("           --------------------------------------------------\n");
            printf("           |0. Chiffrer                                     |\n");
            printf("           |1. Dechiffrer                                   |\n");
            printf("           --------------------------------------------------\n");
            printf("\n");
            printf("Ton choix :");
            scanf("%d",&choice);
            while(getchar()!='\n'); // clear the buffer
    
    
            if(choice==0)
            {
                printf("string which is going to be xor'd: ");
                fgets(buffer,MAXBUFFERSIZE,stdin);
                printf("\r\n %s XOR\n (?)\n: ",buffer);
                scanf("%d",&B);
                encrypt(buffer,B);
                free(buffer);
                buffer=NULL;
    
    
            }
    
            else if (choice==1)
            {
                printf("string to be unxor'd: ");
                fgets(buffer,150,stdin);
                printf("\r\n (?)\n XOR\n %s :",buffer);
                scanf("%d",&B);
                decrypt(buffer,B);
                free(buffer);
                buffer=NULL;
            }
    
            else
                printf("Choose 0 or 1 .");
                free(buffer);
                buffer=NULL;
    
    
    
            return 0;
    }
    encrypt(char *C,int B)
    {
        int i;
        for(i=0;i<C[i];i++)
        {
    
            if (strcmp(&C[i],"\0")!= 0)
            {
                C[i]^=B;
            }
        }
        printf("C XOR B(\"%d\") = A (\"%s\")",B,C);
    }
    
    decrypt(char *C, int B)
    {
        int i;
        for(i=0;i<C[i];i++)
        {
            if (strcmp(&C[i],"\0")!= 0)
            {
                C[i]^=B;
            }
        }
        printf("A XOR B(\"%d\") = C (\"%s\")",B,C);
    }
    #include <string.h>
    #define MAXBUFFERSIZE 1024
    
    void encrypt(char *C,int B);
    void decrypt(char *C,int B);
    int main()
    {
        char *buffer;
        buffer=(char *)malloc(MAXBUFFERSIZE * sizeof(char));
        int B;
        int choice;
    
            printf("????????????????????????????????????????????????????????????????????????????\n");
            printf("?                         SIMPLE XOR ENCRYPT/DECRYPT by  EpicOut           ?\n");
            printf("????????????????????????????????????????????????????????????????????????????\n");
            printf("\n");
            printf("           --------------------------------------------------\n");
            printf("           |0. Chiffrer                                     |\n");
            printf("           |1. Dechiffrer                                   |\n");
            printf("           --------------------------------------------------\n");
            printf("\n");
            printf("Ton choix :");
            scanf("%d",&choice);
            while(getchar()!='\n'); // clear the buffer
    
    
            if(choice==0)
            {
                printf("string which is going to be xor'd: ");
                fgets(buffer,MAXBUFFERSIZE,stdin);
                printf("\r\n %s XOR\n (?)\n: ",buffer);
                scanf("%d",&B);
                encrypt(buffer,B);
                free(buffer);
                buffer=NULL;
    
    
            }
    
            else if (choice==1)
            {
                printf("string to be unxor'd: ");
                fgets(buffer,150,stdin);
                printf("\r\n (?)\n XOR\n %s :",buffer);
                scanf("%d",&B);
                decrypt(buffer,B);
                free(buffer);
                buffer=NULL;
            }
    
            else
                printf("Choose 0 or 1 .");
                free(buffer);
                buffer=NULL;
    
    
    
            return 0;
    }
    encrypt(char *C,int B)
    {
        int i;
        for(i=0;i<C[i];i++)
        {
    
            if (strcmp(&C[i],"\0")!= 0)
            {
                C[i]^=B;
            }
        }
        printf("C XOR B(\"%d\") = A (\"%s\")",B,C);
    }
    
    decrypt(char *C, int B)
    {
        int i;
        for(i=0;i<C[i];i++)
        {
            if (strcmp(&C[i],"\0")!= 0)
            {
                C[i]^=B;
            }
        }
        printf("A XOR B(\"%d\") = C (\"%s\")",B,C);
    }
    On peut remarquer que j'aurais pu utiliser la même fonction pour déchiffrer mais par soucis de propreté j'ai préféré faire comme ci-dessus.
    Dernière modification par EpicOut, 16 juillet 2013, 18h52.

  • #2
    Je ne sais pas comment tu as réglé ton compilateur, mais c'est blindé d'erreurs, et ça ne compile pas du tout...

    1) char *buffer[150]; Tu cherches à faire quoi, car ce n'est pas logique avec fgets(buffer,150,stdin); qui lui ne prend en paramètre qu'une chaîne de caractères.
    2) encrypt(char *C,int B), par défaut envoie un type int, hors toi je pense que c'est un type void, donc bien le spécifier, car c'est faux.
    3) idem que le 2), pour la fonction decrypt
    4) scanf("%d",&choice); faudra tester la valeur de retour, car si la conversion se passe pas bien...
    5) Vérifier le retour pour tout les scanf...

    Bonne continuation...

    Commentaire


    • #3
      C'est bizarre moi ça fonctionne parfaitement, réessaye j'ai nettoyé un peu le code.

      Commentaire


      • #4
        Ça ne fonctionne pas non plus chez moi.
        Code:
        main.cpp:62: error: ISO C++ forbids declaration of 'encrypt' with no type
        main.cpp: In function 'int encrypt(char*, int)':
        main.cpp:62: error: new declaration 'int encrypt(char*, int)'
        main.cpp:6: error: ambiguates old declaration 'void encrypt(char*, int)'
        main.cpp: At global scope:
        main.cpp:76: error: ISO C++ forbids declaration of 'decrypt' with no type
        main.cpp: In function 'int decrypt(char*, int)':
        main.cpp:76: error: new declaration 'int decrypt(char*, int)'
        main.cpp:7: error: ambiguates old declaration 'void decrypt(char*, int)'
        main.cpp: In function 'int main()':
        main.cpp:93: error: redefinition of 'int main()'
        main.cpp:8: error: 'int main()' previously defined here
        main.cpp: At global scope:
        main.cpp:147: error: ISO C++ forbids declaration of 'encrypt' with no type
        main.cpp: In function 'int encrypt(char*, int)':
        main.cpp:147: error: new declaration 'int encrypt(char*, int)'
        main.cpp:91: error: ambiguates old declaration 'void encrypt(char*, int)'
        main.cpp: At global scope:
        main.cpp:161: error: ISO C++ forbids declaration of 'decrypt' with no type
        main.cpp: In function 'int decrypt(char*, int)':
        main.cpp:161: error: new declaration 'int decrypt(char*, int)'
        main.cpp:92: error: ambiguates old declaration 'void decrypt(char*, int)'
        Dernière modification par Yarflam, 16 juillet 2013, 19h15.
        ~ Yarflam ~

        ❉ L'Univers se dirige vers son ultime perfection ❉

        Commentaire


        • #5
          J'ai fais quelques modifications...

          Code:
          #include <stdio.h>
          #include <stdlib.h>
          
          void encrypt(char C[],int B);
          void decrypt(char C[],int B);
          
          int main(void)
          {
                  char test[] = "bonjour";
                  char _test[] = "ncbfcy~";
                  encrypt(test, 12); /* ncbfcy~ */
                  decrypt(_test, 12); /* bonjour */
                  return 0;
          }
          void encrypt(char C[],int B)
          {
              int i=0;
              while (C[i] != '\0')
                  C[i] ^= B, i++;
              printf("C XOR B(\"%d\") = A (\"%s\")\n",B,C);
          }
          
          void decrypt(char C[], int B)
          {
              encrypt(C, B);
          }
          Voilà à quoi ressemble le code si on simplifie
          Dernière modification par fred, 16 juillet 2013, 21h05.

          Commentaire


          • #6
            Voilà à quoi ressemble le code si on simplifie
            En effet.

            Le code fonctionne à merveille.
            ~ Yarflam ~

            ❉ L'Univers se dirige vers son ultime perfection ❉

            Commentaire


            • #7
              Envoyé par Yarflam Voir le message
              Ça ne fonctionne pas non plus chez moi.
              Code:
              main.cpp:62: error: ISO C++ forbids declaration of 'encrypt' with no type
              main.cpp: In function 'int encrypt(char*, int)':
              main.cpp:62: error: new declaration 'int encrypt(char*, int)'
              main.cpp:6: error: ambiguates old declaration 'void encrypt(char*, int)'
              main.cpp: At global scope:
              main.cpp:76: error: ISO C++ forbids declaration of 'decrypt' with no type
              main.cpp: In function 'int decrypt(char*, int)':
              main.cpp:76: error: new declaration 'int decrypt(char*, int)'
              main.cpp:7: error: ambiguates old declaration 'void decrypt(char*, int)'
              main.cpp: In function 'int main()':
              main.cpp:93: error: redefinition of 'int main()'
              main.cpp:8: error: 'int main()' previously defined here
              main.cpp: At global scope:
              main.cpp:147: error: ISO C++ forbids declaration of 'encrypt' with no type
              main.cpp: In function 'int encrypt(char*, int)':
              main.cpp:147: error: new declaration 'int encrypt(char*, int)'
              main.cpp:91: error: ambiguates old declaration 'void encrypt(char*, int)'
              main.cpp: At global scope:
              main.cpp:161: error: ISO C++ forbids declaration of 'decrypt' with no type
              main.cpp: In function 'int decrypt(char*, int)':
              main.cpp:161: error: new declaration 'int decrypt(char*, int)'
              main.cpp:92: error: ambiguates old declaration 'void decrypt(char*, int)'
              C'est moi, où j'ai l'impression que tu l'as compilé en tant que c++ ?
              Fred> Pas mal la simplification

              Commentaire


              • #8
                Oui, je l'ai compilé en C++.
                L'habitude ... (j'avais pas fait gaffe)

                N'empêche que l'algorithme de Fred est compatible avec du C & C++.
                ~ Yarflam ~

                ❉ L'Univers se dirige vers son ultime perfection ❉

                Commentaire


                • #9
                  Il est même possible de le faire en une seule fonction (fonction de cryptage + décryptage)

                  Code:
                  #include <stdio.h>
                  #include <stdlib.h>
                  
                  void crypt(char C[],int B, int decrypt);
                  
                  int main(void)
                  {
                          char test[] = "bonjour";
                          crypt(test, 12, 0); /* ncbfcy~ */
                          crypt(test, 12, 1); /* bonjour */
                          crypt(test, 12, 10); /* erreur */
                          return 0;
                  }
                  void crypt(char C[],int B, int decrypt)
                  {
                      char *p = NULL;
                      const char *func = (!decrypt) ? "crypt" : "decrypt";
                      if (decrypt != 1 && decrypt != 0)
                          exit(EXIT_FAILURE);
                      printf("%s %s -> ", func, C);
                      for (p=C; *p!='\0'; p++)
                          *p ^= B;
                      printf("%s\n", C);
                  }
                  Dernière modification par fred, 17 juillet 2013, 14h38.

                  Commentaire

                  Chargement...
                  X