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 !

CRYPTAGE XOR


Information sur la source

Catégorie :Sécurité & Cryptage Niveau : Débutant Date de création : 25/11/2002 Date de mise à jour : 25/11/2002 01:54:27 Vu : 2 682

Note :
Aucune note

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

Description

ce code crypte et decrypte une image en format brut *.RAW en modifant chaque pixel par l'operateur de bit XOR
 

Source

  • #include<stdio.h>
  • #include<stdlib.h>
  • #include<conio.c>
  • int h,l; // hauteur et largeur de l'image
  • /*************************************************************************************************/
  • /* fonction lire_image() qui lit le fichier image */
  • /* */
  • /*************************************************************************************************/
  • unsigned char *lire_image(void)
  • {
  • FILE*fp;
  • char nom[80]; //nom du fichier a creer
  • unsigned char *vec ; //pointeur sur le fichier dans la memoire retourner par la fonction
  • printf("donner la largeur et la hauteur du fichier\n"); //saisie de la taille dun fichier
  • scanf("%d%d",&l,&h);
  • printf("donner le nom du fichier a ouvrire\n"); //saisie du nom et emplacement du fichier a creer
  • scanf("%s",&nom);
  • fp=fopen(nom,"rb"); //ouverture du fichier en mode rb
  • if(!fp)
  • { printf("\aimpossible d'ouvrire le fichier \n");
  • exit(0);
  • }
  • vec=(unsigned char *)malloc(l*h); //allocation de l*h bloc
  • fread(vec,sizeof(unsigned char),l*h,fp);
  • fclose(fp); //fermeture du fichier
  • return vec; // pointeur retourner
  • }
  • /*************************************************************************************************/
  • /* fonction ecrire_image() qui ecrit le nouveau fichier crypter */
  • /* */
  • /*************************************************************************************************/
  • void ecrire_image(unsigned char *imageD)
  • {char nom [80];
  • int a=0,b=0;
  • FILE *fp;
  • printf("nom et chemin de l'image destination\n");
  • scanf("%s",&nom);
  • printf("largeur et hauteur\n");
  • scanf("%d%d",&a,&b);
  • fp=fopen(nom,"wb");
  • fwrite(imageD,sizeof(unsigned char),h*l,fp);
  • fclose(fp);
  • }
  • void main()
  • {
  • unsigned char *image,*imageD;
  • unsigned char cle=15;
  • int i;
  • initscreen();
  • image=lire_image();
  • printf("IMAGE LODER DANS LA MEMOIRE\n");
  • for(i=0;i<l*h;i++)
  • {image[i]=image[i]^cle; } /*XOR*/
  • printf("image crypter\n");
  • imageD=image;
  • ecrire_image(imageD);
  • printf("operation terminée\n");
  • free(image);
  • getch();
  • }
#include<stdio.h>
#include<stdlib.h>
#include<conio.c>

 int h,l;                                      // hauteur et largeur de l'image

/*************************************************************************************************/
/*                 fonction lire_image() qui lit le fichier image                                */
/*                                                                                               */
/*************************************************************************************************/

unsigned char *lire_image(void)
{

 FILE*fp;

 char   nom[80];                   //nom du fichier a creer
 unsigned char *vec ;             //pointeur sur le fichier dans la memoire retourner par la fonction


 printf("donner la largeur et la hauteur du fichier\n");    //saisie de la taille dun fichier
 scanf("%d%d",&l,&h);


 printf("donner le nom du fichier a ouvrire\n");          //saisie du nom et emplacement du fichier a creer
 scanf("%s",&nom);

 fp=fopen(nom,"rb");                                   //ouverture du fichier en mode rb


if(!fp)
{ printf("\aimpossible d'ouvrire le fichier \n");
     exit(0);
	}

vec=(unsigned char *)malloc(l*h);                       //allocation de l*h bloc

 fread(vec,sizeof(unsigned char),l*h,fp);
 fclose(fp);                                          //fermeture du fichier

     return vec;                                    // pointeur retourner
	}


/*************************************************************************************************/
/*                 fonction ecrire_image() qui ecrit le nouveau fichier crypter                  */
/*                                                                                               */
/*************************************************************************************************/





void ecrire_image(unsigned char *imageD)
{char nom [80];
 int a=0,b=0;
FILE *fp;

printf("nom et chemin de l'image destination\n");
 scanf("%s",&nom);


printf("largeur et hauteur\n");
 scanf("%d%d",&a,&b);

 fp=fopen(nom,"wb");
 fwrite(imageD,sizeof(unsigned char),h*l,fp);
 fclose(fp);
}




void main()
{
	unsigned char *image,*imageD;
	unsigned char cle=15;
	int i;
 
	initscreen();
	
	image=lire_image();
	printf("IMAGE LODER DANS LA MEMOIRE\n");

	for(i=0;i<l*h;i++)
	{image[i]=image[i]^cle; }       /*XOR*/
 
	
	 printf("image crypter\n");

  imageD=image;
	 ecrire_image(imageD);
	 printf("operation terminée\n");
	 
	 
	 
	 free(image);
	 getch();

}

Conclusion

svp criticquezzzzzzzzzz mon code et reponder moi sur le forum
 

Commentaires et avis

signaler à un administrateur
Commentaire de GoldenEye le 25/11/2002 10:38:28

Pourquoi tu ne calcules pas la taille du fichier ?

signaler à un administrateur
Commentaire de Kaid le 25/11/2002 11:05:31

Pourquoi tu demandes à l'utilisateur la hauteur et la largueur du fichier dans la fonction void ecrire_image(unsigned char *imageD) car tu ne te serts pas du résultat de la saisie.

signaler à un administrateur
Commentaire de 6Po le 25/11/2002 18:52:39

l*h a mon avis ca sert a qqch non :D
il crée un tableau selon la taille de ton image !

Fo tout lire avant de poser des question bêtes :D

signaler à un administrateur
Commentaire de Kaid le 25/11/2002 19:27:51

Je parles pas des variables h et l dans la fonction ecrire_image(unsigned char *imageD) mais des variables a et b (celles renseignées par l'utilisateur).
"Fo tout lire avant de poser des question bêtes :D" -&gt; parles pour toi.

signaler à un administrateur
Commentaire de Kaid le 25/11/2002 19:35:47

&gt; Message de : gloom Déposé le : 25/11/2002 16:55:55
&gt; Sujet : demande de taille dans ecrire-image
&gt; Message : salut ...la taille je me sert pour modifier la taille d'origine ..au debut
&gt; mettant que tu as ton image sur 1400 de largeur et 1600 de hauteur  tu cryptes
&gt; mais tu modifies aussi la taille a la fin tu aurras une image cryptée disant 250
&gt; *300 mais ca c pas nécessaire car pour editer a photo tu as besoin d'un editeur
&gt; de photo tels que paint shop ou photo shop et la majoritée d'entre eux possédes
&gt; des Zoom et donc modifies ta taille j'éspére que g repondue a ta question si il y
&gt; en a d'autres n'hésites pas a+

Donc ca devrait servir (car tu n'utilises pas a et b dans ecrire_image()) pour recadrer l'image ? Car si tu veux réduire la taille de l'image il faut utiliser un algo plus complexe.
Tu peux faire évoluer ton programme pour qu'il crypte n'importe quel fichier.

signaler à un administrateur
Commentaire de Kaid le 26/11/2002 00:41:51

&gt; Message de : gloom Déposé le : 25/11/2002 20:27:52
&gt; Sujet : ok d'oki
&gt; Message : ah d'accord pour un algorithme plus complexe j'y penserais...moi g
&gt; voulue juste appliquer un simple cryptage XOR c le plus simple qui existe non ...
&gt; moi je travaille a le faire evoluer dans le sens ou je veut faire editer mon image
&gt; sous console win32 sans etre obligé de passé par un editeur de photo
&gt; est ce ke c possible ?

En fait tu veux afficher l'image à l'écran c'est ca ?

signaler à un administrateur
Commentaire de trinitacs le 26/11/2002 18:05:28

pk tu lis le fichier, tu le stockes dans un tableau et ensuite tu écris ? C'est plus simple de lire un octect et mettre dan un buffer de un octect et de lcrypter et ensuite de l'écrire.

Sinon si tu ne peux pas ouvrir le fichier c'est pas exit( 0 ) qu'il fautmettre mais exit( -1 );

Sinon il y a déjà plein de prog avec cryptage xor sur cppfrance.

signaler à un administrateur
Commentaire de Kaid le 27/11/2002 13:17:30

trinitacs: plein de programmes = 1 ?

signaler à un administrateur
Commentaire de trinitacs le 27/11/2002 16:28:57

Kaid &gt;&gt; Je coirs qu'on est pas sur les même longuers d'indes? Bon tant pis je m'explique:

Je suis allé dans la rubrique sécurité-cryptage. Volà des sources utilisant un cryptage xor, ou plutôt j'ai simplement cliqué sur les titres qui me semblait succeptibles d'utiliser un cryptage xor (j'ai autre chose à faire que de tous les regardé.
http://www.programmationworld.com/Forum/Messages.asp?Ids_sru=2&Ids_suj=3962&PageSujets=0&PageMessages=0
Ça fait 2.

http://www.cppfrance.com/article.aspx?Val=854
Ça fait 3 (il y a peut-être une couille avec les liens ousp)

Sachant que ce n'est que sur la première pasge de cette catégorie, on peut grossièrement multiplier par 2 car il y a 2 pages au total. Ensuite jai déjà vu exemple de cryptage xor dans la partie tutorial.

Si il n'y avait pas déjà des porgs avac un cryptage xor j'aurai déjà mis ma source à cryptage xor avec des masques jetables (c'est déjà plus eficace même si c'est pas pratique) sur cppfrance. De plus l'interêt d'une telle source n'est pas palpitant, quoique avec une fonction récursive c'est déjà plus drôle :)

Bon aller il y en a déjà entre 4 et 6.

signaler à un administrateur
Commentaire de Kaid le 27/11/2002 17:21:19

Je parlais en fait des programmes qui ont pour but de crypter/décrypter les fichiers grâce au XOR. Pas les programmes qui utilisent pour une raison ou une autre un cryptage XOR.
A part celui de GoldenEye, celui ci http://www.cppfrance.com/article.aspx?Val=854 n'est pas sur (stocke la clé).

Sinon je comprends pas le lien sur http://www.programmationworld.com ? Erreur de manip ?

signaler à un administrateur
Commentaire de trinitacs le 29/11/2002 16:39:55

Arf oui, j'ai l'habitude d'aller sur plusieurs sites en même temps, erreur de ma part; désolé.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,140 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é.