Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRYPT-DECRYPT AVEC XOR


Information sur la source

Catégorie :Sécurité & Cryptage Niveau : Initié Date de création : 13/04/2003 Date de mise à jour : 13/04/2003 18:47:31 Vu : 3 587

Note :
Aucune note

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

ba le titre est assez clair...
 

Source

  • #include <iostream.h>
  • #include <stdio.h>
  • #include <conio.c>
  • /*############################################################################*/
  • int crypt()
  • {
  • char mot[999];
  • char crypt[999];
  • int cle;
  • clrscr();
  • cout << "mot a crypter : ";
  • gets(mot);
  • cout << "cle numerique : ";
  • cin >> cle;
  • for(int n=0;n<strlen(mot);n++)
  • {
  • crypt[n] = mot[n] ^ cle;
  • }
  • cout << crypt;
  • }
  • /*############################################################################*/
  • int decrypt()
  • {
  • char motc[999];
  • char decrypt[999];
  • int cle2;
  • clrscr();
  • cout << "mot : ";
  • gets(motc);
  • cout << "cle numerique : ";
  • cin >> cle2;
  • for(int n=0;n<strlen(motc);n++)
  • {
  • decrypt[n] = motc[n] ^ cle2;
  • }
  • cout << decrypt;
  • }
  • /*############################################################################*/
  • int main()
  • {
  • int choix;
  • cout << "1.Crypter\n2.Decrypter\n";
  • cin >> choix;
  • switch(choix)
  • {
  • case 1:
  • crypt();
  • break;
  • case 2:
  • decrypt();
  • break;
  • default:
  • exit(0);
  • break;
  • }
  • getchar();
  • }
#include <iostream.h>
#include <stdio.h>
#include <conio.c>


/*############################################################################*/


int crypt()
{
char mot[999];
char crypt[999];
int cle;

    clrscr();

     cout << "mot a crypter : ";
     gets(mot);
     cout << "cle numerique : ";
     cin >> cle;

     for(int n=0;n<strlen(mot);n++)
     {
     crypt[n] = mot[n] ^ cle;
     }

     cout << crypt;
}


/*############################################################################*/


int decrypt()
{
char motc[999];
char decrypt[999];
int cle2;

    clrscr();

     cout << "mot : ";
     gets(motc);
     cout << "cle numerique : ";
     cin >> cle2;

     for(int n=0;n<strlen(motc);n++)
     {
     decrypt[n] = motc[n] ^ cle2;
     }

     cout << decrypt;
}

/*############################################################################*/


int main()
{
int choix;

    cout << "1.Crypter\n2.Decrypter\n";
    cin >> choix;

    switch(choix)
    {
     case 1:
     crypt();
     break;

     case 2:
     decrypt();
     break;

     default:
     exit(0);
     break;
    }

getchar();
}

Conclusion

Sou DevC++
 

Commentaires et avis

signaler à un administrateur
Commentaire de Bki le 14/04/2003 01:46:30

C'est du niveau 2 ça ?????

signaler à un administrateur
Commentaire de GoldenEye le 14/04/2003 11:19:56

T'inscris ça dans un fichier et ce sera nickel

signaler à un administrateur
Commentaire de cmarsc le 14/04/2003 11:49:25

strlen est dans &lt;string.h&gt;  
getch() (&lt;conio.c&gt; ou .h) plus pratique que getchar() ( standard &lt;stdio.h&gt; )

signaler à un administrateur
Commentaire de Bki le 14/04/2003 14:38:39

J'vaux dire que ça parait un peu trop enfantin pour un niveau 2 :)

signaler à un administrateur
Commentaire de Bki le 14/04/2003 15:12:11

&lt;conio.h&gt;... made by Borland... non portable

signaler à un administrateur
Commentaire de Krox68 le 14/04/2003 17:42:25

merci Gildeneye jy pense...
moi je trouve kil est bien mon prog
non ?

signaler à un administrateur
Commentaire de Krox68 le 14/04/2003 17:45:15

GOLDENEYE...pardon pour le Gildeneye

signaler à un administrateur
Commentaire de Bki le 14/04/2003 21:25:34

Je n'ai pas dit le contraire :)

signaler à un administrateur
Commentaire de GoldenEye le 15/04/2003 11:02:58

Ah aussi, "clé" n'est pas forcément un int, ce serait mieux si c'était un char * que tu fais tourner sur la longueur de la chaine à coder
ex
BONJOUR avec comme clé PSG
B xor P
O xor S
N xor G
J xor P
...

signaler à un administrateur
Commentaire de AmK le 15/04/2003 15:12:18

Ben ya comme meme quelques erreurs,(je suis sur que t'as pas fait expres de les faire
ça peut arriver :))

1- puisque tu utilises exit(0) tu devrais alors inclure le fichier d'entete &lt;stdlib.h&gt;
2-inclure le header file &lt;string.h&gt; pour strlen
3-Tu as declare ta fonction de type int , mais quand tu l'as appelle tu as fait comme ci
elle etait de type void !

donc au lieu de int decrypt();
mets  : void decrypt();

c'est pareil pour crypt(); !

voila ta source sans les bugs :

#include &lt;iostream.h&gt;
#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
#include &lt;string.h&gt;  /* Pour strlen ! */
#include &lt;stdlib.h&gt;  /* Pour exit   ! */


/*############################################################################*/


void crypt()
{
char mot[999];
char crypt[999];
int cle;

    

     cout &lt;&lt; "mot a crypter : ";
     cin&gt;&gt;mot;

     cout &lt;&lt; "cle numerique : ";
     cin &gt;&gt; cle;

     for(int n=0;n&lt;strlen(mot);n++)
     {
     crypt[n] = mot[n] ^ cle;
     }

     cout &lt;&lt; crypt;
}


/*############################################################################*/


void decrypt()
{
char motc[999];
char decrypt[999];
int cle2;

    

     cout &lt;&lt; "mot : ";
     cin&gt;&gt;motc;
     cout &lt;&lt; "cle numerique : ";
     cin &gt;&gt; cle2;

     for(int n=0;n&lt;strlen(motc);n++)
     {
     decrypt[n] = motc[n] ^ cle2;
     }

     cout &lt;&lt; decrypt;
}

/*############################################################################*/


int main()
{
int choix;

    cout &lt;&lt; "1.Crypter
2.Decrypter
";
    cin &gt;&gt; choix;

    switch(choix)
    {
     case 1:
     crypt();
     break;

     case 2:
     decrypt();
     break;

     default:
     exit(0);
     break;
    }
getchar();

}

PS: j'ai mis cin , a la place de gets mais je suis pas sur de mon coup là!
une chose est sur avec gets ça marchait pas bien,parceque impossible de saisir le mot !

Voila tu peux aussi comme l'a dis goldeneye inscrire le tout dans un fichier ça serait pas mal !
par exemple voila la source de cryptage seulement avec fichier :

#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;econio.h&gt;

struct compi {char mot[999],motc[999];int cle ; }; /* Strcture qui va nous servir pour la manipulation de fichiers !*/

void fichier();
void fenetre();

void fichier() /* Definition de la fonction fichier */

{


FILE *X;
char rep;
int t,i;
compi c; /* Variable de type structure */
int cle;


textcolor(12);
textbackground(10);
printf("
Programme de cryptage du XOR en mode fichier
");
X=fopen("crypta.txt","a+"); /* Ouverture du fichier en mode a+ c'est a dire on peut ajouter des donnees sans detruire */
do
{
printf("
Entrez votre mot et votre cle !");
scanf("%s %d",&c.mot,&c.cle);
fwrite(&c,sizeof(compi),1,X);


t=strlen(c.mot);
for (i=0;i&lt;=t;i++)
{
c.motc[i]=c.mot[i] ^ cle;
}

printf("
Voila votre texte Crypté ! : %s",c.motc);
fwrite(&c,sizeof(compi),1,X);

printf("
Encore ?");
rep=getche();
}
while (rep=='o');

fclose(X);
}

void fenetre()
{
char mot1[999],motc1[999];
int n,cle1,j;
textcolor(16);
textbackground(20);
printf("
Cryptage du XOR en mode Direct !
");
printf("
Quel est le mot à crypter ?");
scanf("%s",&mot1);
printf("
Quelle est la cle avec laquelle tu vas crypter ?");
scanf("%d",&cle1);

n=strlen(mot1); // Calcul de la taille du mot

for (j=0;j&lt;=n;j++)
{
motc1[j]=mot1[j] ^ cle1; // on applique l'operateur du xor lettre par lettre jusqu'a la fin du mot
}
printf("
Voila votre texte Crypte ! :
%s",motc1);
}

void main()
{
int choix;
retour:
printf("
1-Mode Fichier
2-Mode Direct
");
scanf("%d",&choix);
switch(choix)
{
case 1:
fichier(); // Appel de la fonction fichier();
break;

case 2:
fenetre(); // Appel de la fonction fenetre();
break;

default :
goto retour;
break;
}
}

/*fin */
Amicalement
A++

signaler à un administrateur
Commentaire de GoldenEye le 15/04/2003 15:36:58

C bon mais alors c'est long comme code !!!!!!!!!!!!!!!!!! (cf ma source sur le même sujet)
PAS DE GOTO !!!
crypt et decrypt, c'est la même chose effectivement

signaler à un administrateur
Commentaire de Krox68 le 16/04/2003 15:19:35

ok merci pour vos bons commentaires,
c'est si rare...

signaler à un administrateur
Commentaire de soseki le 16/04/2003 16:23:33

Pour le cryptage XOR, je crois que cela suffit  non ?:

/* cryptage  XOR */

#include &lt;stdio.h&gt;
#define CLE 57

void main(int argc, char**argv)
{
FILE *In,*Out;
unsigned char byte;


if (argc != 3)
{
printf("
Usage : %s &lt;fichier source&gt; &lt;fichier destination&gt;
",argv[0]);
exit(0);
}


if ((In = fopen(argv[1], "rb+"))== NULL)
{
printf("Fichier %s introuvable!
",argv[1]);
exit(-1);
}

if ((Out = fopen(argv[2], "wb+" ))== NULL)
{
printf("Fichier %s imppossible à créer
",argv[2]);
fclose(In);
exit(-1);
}

while (fread(&byte,2,2,In))
{
byte ^=CLE;
fwrite(&byte,2,2,Out);
}
fclose(In);
fclose(Out);
}

signaler à un administrateur
Commentaire de GoldenEye le 16/04/2003 19:03:03

pourquoi CLE est égal à 57 ? :-))

signaler à un administrateur
Commentaire de soseki le 16/04/2003 22:28:07

C juste pour qu'il est une valeur, on peut mettre ce que l'on veut.
ça changera l'apparence du contenu du fichier crypté.
!!!!Le code que j'ai mis est faux :
il faut mettre des 1 à la place des 2 au niveau du while et du fwrite !!!!
désolé

signaler à un administrateur
Commentaire de GoldenEye le 16/04/2003 23:23:20

Laisse à l'user le soin de choisir la clé

signaler à un administrateur
Commentaire de D1m3x le 04/05/2003 20:53:41

Euh je vois pas pk tu met: char char mot[999];
le maximum de lettre d'un char étant de 256 ça ne te sert strictement à rien!

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.