Partage
  • Partager sur Facebook
  • Partager sur Twitter

Réaliser un programme de cryptage ?

juste avec les cours de Matéo

Sujet résolu
    31 janvier 2006 à 23:34:04

    Bonsoir tout le monde. Je sais que j'ai les yeux plus gros que le ventre mais je voudrais juste vous posez une petite question. En fait je voudrais savoir si en l'état d'avancement des tutos, il serait possible de réaliser un cryptage tout simple d'un texte? Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      31 janvier 2006 à 23:37:29

      Oui et non. J'ai planché tout à l'heure sur un possible tp pour dans quelques chapitres sur un cryptage à décalage basé sur une clé mais... j'ai trouvé ça moi-même un peu compliqué et pas très joli.

      Soit j'améliore et simplifie un peu à la fois (pas évident), soit j'abandonne l'idée de tp mais alors y risque de pas trop y avoir de tp dans la partie II (en revanche la partie III en sera remplie de toute manière).
      • Partager sur Facebook
      • Partager sur Twitter

      If you'd like to join us, read "How do we work at OpenClassrooms"! :)

        31 janvier 2006 à 23:46:02

        Ah d'accord, et bien merci de m'avoir répondu. Je pensais que se serais peut-être pas mal a essayer même si je suis sur de pas réussir...

        <hs> en passant je voulais te dire que j'ai vraiment de respect pour toi j'aimerais franchement avoir ton niveau et dire que je devrais être a Epitech a cette heure ... </hs>
        • Partager sur Facebook
        • Partager sur Twitter
          1 février 2006 à 16:54:48

          Idée, Fougerus : utilise le numero des char ( modifie le )
          • Partager sur Facebook
          • Partager sur Twitter
            1 février 2006 à 17:09:56

            9a serait pas possible de prendre toutes les du textes de les transformés en code ASCII, et ensuite, à ce code on prend un nombre quie à une série de calcule qui serait limiter entre 0 et 255, et enfin on remet le nouveau code en caractère tout beau ?
            • Partager sur Facebook
            • Partager sur Twitter
              1 février 2006 à 17:21:25

              for(i=0;i<strlen(texte);i++)texte[i]++;
              • Partager sur Facebook
              • Partager sur Twitter
                1 février 2006 à 17:30:35

                Moi j'avais fait comme ça pour mon crypteur/décrypteur ( un de mes seul programme portable :-° ):
                #include <stdio.h>
                #include <stdlib.h>
                int i;
                void crypt(char *texte_dc)
                {   
                   
                 i=strlen(texte_dc);
                   while (i!=0)
                   {
                         if (texte_dc[i]!='a')
                         texte_dc[i]-=1;
                         
                         i--;
                         
                         }
                     texte_dc[i]-=1;
                    puts(texte_dc);     
                }

                void decrypt(char *texte_dc)
                {
                 
                   
                 i=strlen(texte_dc);
                   while (i!=0)
                   {
                   if (texte_dc[i]!='a')
                         texte_dc[i]+=1;
                         i--;
                         
                         }
                     texte_dc[i]+=1;
                     texte_dc[strlen(texte_dc)-1]='\0';
                    puts(texte_dc);
                 
                     
                }

                int main(int argc, char *argv[])
                {
                   int reponse;
                   char texte_aa[255];
                    printf("1 - Crypter\n");
                  printf("2 - Decrypte\n");

                  scanf("%d",&reponse);
                   getchar();
                  if (reponse == 1)
                  {
                    printf("\n\nTexte a Crypter : ");
                   
                    fgets(texte_aa,255,stdin);
                    texte_aa[strlen(texte_aa)-1]='\0';
                    crypt(texte_aa);         
                  }
                  if (reponse==2)
                  {
                       printf("\n\nTexte a Decrypter : ");
                     fgets(texte_aa,255,stdin);
                     texte_aa[strlen(texte_aa)-1]='\0';
                    decrypt(texte_aa);                         
                                 } 
                    printf("Appuyer sur une touche pour continuer..\n");
                    getchar();
                   
                    return 0;
                }



                Je sais que le for est plus adapté dans cette situation :D
                • Partager sur Facebook
                • Partager sur Twitter
                  1 février 2006 à 17:37:38

                  L'arithmétique de pointeurs est surtout plus adaptée ici...
                  Indice :
                  char *p;
                  ++p; /* déplace le pointeur sur le prochain élément dans le tableau */
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 février 2006 à 17:37:44

                    for(i=0;i<strlen(texte);i++)texte[i]=texte[i]*1.02; est marrant aussi, j'ai pas vraiment compris pourquoi mais le decriptage est avec un divise par 0.015, surement à cause des arrondis
                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 février 2006 à 17:52:40

                      De toute façon, y a des tonnes d'algo de cryptage, rien que pour la Table Ascii, faut essayer de mélanger chaine de caractères, Ascii et tableau.. Ca rend pas mal !
                      Je suis en train d'en faire un, je mettrais le code !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 février 2006 à 18:28:08

                        Citation : rom1504

                        for(i=0;i<strlen(texte);i++)texte[i]++;



                        Cryptage plus complexe:

                        void cryptage(unsigned char texte[])
                        {
                           long i;
                           for(i = 0; i < strlen(texte); i++)
                           {
                              if(texte[i] * 2  < 255)
                                 texte[i] *= 2;

                              else if(texte[i] % 2 == 0)
                              {
                                 texte[i] /= 2;
                                 if(texte[i] % 2 == 0)
                                    texte[i] --;
                              }

                              if(texte[i] > 180)
                                 texte[i] -= 12;
                             
                              if(texte[i] < 150)
                                 texte[i] += 17;

                              texte[i] += i;
                             
                           }
                        }
                        void decryptage(unsigned char texte[])
                        {
                           long i;
                           for(i = 0; i < strlen(texte); i++)
                           {
                              texte[i] -= i;


                              if(texte[i] - 17 < 150)
                                 texte[i] -= 17;

                              if(texte[i] + 12 > 180)
                                 texte[i] += 12;
                             
                              if(texte[i] % 2 == 0)
                                 texte[i] /= 2;
                              else if(texte[i] * 2 > 123 && texte[i] < 123)
                                 texte[i] *= 2;
                           }
                        }

                        (pas sur que ça marche, mais bon.. Si ça marche ça doit faire un bon cryptage ;) )

                        EDIT: Waw ça marche trop bien o_O (Parfois il y a une lettre ou deux pas cryptées(EDIT: Désolé j'avais pas mis "dé") mais bon ^^ ) Faites soit le cryptage ou le decryptage pour crypter, et inversement pour decripter (le cryptage décripte le decryptage, et inversement)

                        EDIT: Voici main.c pour ceux qui veulent voir comment je fais:

                        #include <stdio.h>
                        #include <stdlib.h>
                        #include "cryptage.h"

                        int main(int argc, char *argv[])
                        {
                          unsigned char texte[100];
                          long choix = 0;
                          printf("Tape un texte(100 caracteres max)\n(remplace les espaces par _(en dessous du chiffre 8)):");
                          scanf("%s",texte);
                          printf("Tu veux crypter le texte(1), ou alors le crypter autrement(2) \nou le cryptage et apres le decryptage(3 ou 4)?");
                          scanf("%ld",&choix);
                          sleep(4000);
                          if(choix == 1)
                          {
                             cryptage(texte);
                             printf("Cryptage en cours..\n\n");
                             sleep(2000);
                             printf("Voici ton texte crypte:%s\n",texte);
                          }
                          else if(choix == 2)
                          {
                             decryptage(texte);
                             printf("Decryptage en cours..");
                             sleep(2000);
                             printf("Voici le texte decrypte:%s\n",texte);   
                          }
                          else if(choix == 3)
                          {
                             cryptage(texte);
                             printf("Cryptage:%s\n",texte);
                             decryptage(texte);
                             printf("Decryptage:%s\n",texte);     
                          }
                          else
                          {
                             decryptage(texte);
                             printf("Cryptage:%s\n",texte);
                             cryptage(texte);
                             printf("Decryptage:%s\n",texte);
                          }
                         
                          system("PAUSE");     
                          return 0;
                        }


                        EDIT: Plus aucuns bugs dans la fonction :D

                        EDIT: A si, tout compte fait.. Le Z devient ' ou " ".. Et d'autres lettres sont remplacées apres le decryptage du cryptage... Et encore plus de lettres pour le decryptage du cryptage numéro 2..
                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 février 2006 à 19:22:15

                          Je vais sûrement essayer quand même même si c'est pas le cryptage le plus infaillible lol, juste un truc tout simple voir si j'y arriverais merci. Merci beaucoup pour vos suggestions.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 février 2006 à 19:39:31

                            Ok, un cryptage qui.. Bah, qui augmente les numéros des lettres, qui les multiplie, qui les divise, et qui donne le tout! Lol! Mais crypter c'est pas le plus dur.. C'est décrypter le plus dur ^^ Faut faire exactement l'inverse, mais c'est hard, et parfois tu ne peux pas faire l'inverse lol :p

                            EDIT: Exemple de cryptage simple (mais pas de solution de décryptage)


                            void cryptage(unsigned char texte[])
                            {
                               long i;
                               for(i = 0; i < strlen(texte); i ++)
                                  texte[i] *= pow(i,texte[i]); /*ps: penser a inclure maths.h
                                 
                                  pow(i,texte[i]) veut dire i puissance texte[i] ;-)
                                  donc on crypte a fond ^_^ En fait, si le nombre depasse 255,
                                  c'est pas grave! Parce que quand le nombre est égal a 255,
                                  il redevient automatiquement égal a zéro :-) ! A 256,
                                  il devient egal a 1, etc.. Donc pas grave si ça depasse
                                  (sauf pour décrypter ^^)*/

                            }
                            • Partager sur Facebook
                            • Partager sur Twitter
                              1 février 2006 à 20:18:24

                              Petit renseignement pour l'ignorant que je suis ... quel pourrait être l'interêt d'un cryptage undécryptable ??? Et pourquoi le nombre repasse-t-il a 0 quand il atteint 255 ??? Merci
                              • Partager sur Facebook
                              • Partager sur Twitter
                                1 février 2006 à 20:21:40

                                A être sûr que même ta corbeille windows ne pourra pas comprendre le fichier que tu lui envoie ^^

                                edit : pour ce qui es de reppasser à 0 quand à 255, le nmbre se prends automatiquement un coup de % 255 dans sa tête ... ce qui explique tout.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  1 février 2006 à 20:27:01

                                  Oui je vois pas bien l'interêt d'un cryptage indécryptable o_O
                                  à ce moment là tu fais un rand et puis voilà :-°
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    1 février 2006 à 20:33:03

                                    A en fait on peut s'amuser a faire un faux cryptage :p
                                    On demande d'entrer le texte, ensuite on crée une variable qui contiendra du texte aléatoire, et apres on réafiche l'ancien texte et en disant que ça crypte hyper bien (pareil pour decrypter ^^ ) et que le cryptage changera toujours :-°

                                    Edit: EXERCICE: Trouver fonction de decryptage, sachant que l'on crypte comme ceci:


                                    void cryptage(unsigned char texte[])
                                    {
                                       long i;
                                       for(i = 0; i < strlen(texte); i++)
                                          texte[i] += i;
                                    }


                                    A en fait, il retourne a zéro parce que le maximum c'est 255 (pour un unsigned char), donc on ne peut plus aller plus loin et on retourne au minimum que peut contenir la variable (avec un unsigned c'est 0)mais aussi, quand on va en dessous de 0, il revient a 255, parce que 0 c'est le minimum (logique).
                                    oui en gros il se prend en permanence un

                                    if(variable > max)
                                       variable = min + (variable - max);

                                    else if(variable < min)
                                       variable = max - (min - variable);
                                    dans la tête ^^


                                    EDIT: Si vous n'avez pas compris, oubliez tout de ce que je vous ai dit sur ce sujet :p


                                    EDIT: A en fait j'ai réussi a savoir tout ça en tapant 2147483648 dans un long :-° C'est égal a -2147483648, vous pouvez vérifier ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Réaliser un programme de cryptage ?

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown