Invention d'un nouveau type de cryptage... (si il est nul, me le dire)

Soyez le premier à donner votre avis sur cette source.

Vue 4 878 fois - Téléchargée 216 fois

Description

Le titre est peut etre un peu ventard car je ne sais pas si ça existe déjà...
C'est un peu codé à la barbare, je le reconnais, j'aurais pu faire quelques efforts et mettre plus de commentaires, mais je suis sûr que vous ne m'en voudrez pas :)
En fait, le cryptage ne nécessite pas de mot de passe, le fichier est crypté d'après lui même. Je pense que sans le code source, on ne peut pas décrypter mes fichiers, vous me direz ce que vous en pensez car c'est vrai que je ne suis pas un pro en programmation^^
De plus, le fichier crypter est beaucoup plus gros (12 fois je crois) que le fichier d'origine, et ça ne fonctionne que pour des petits fichiers (inférieurs à quelques mégas).
Il faut tout d'abord écrire un fichier "test.txt" que vous remplirez comme vous voudrez, dans le même repertoire que le programme source. Ensuite, le code génère un fichier crypté : "txtcod.txt" et un fichier redécrypté : "decode.txt".
Il a été testé sous borland c++ 5.02 et marche parfaitement chez moi.
Bien sûr, j'attends vos critique (je pense qu'il y en aura beaucoup) et vos remarques, ainsi que vos conseils et/ou vos encouragements^^
Il ne vous reste plus qu'à tester...

Source / Exemple :


J'ai mis un zip cette fois ci, avec l'executable pour ceux qui n'arriveraient pas à le compiler...
Le code est le suivant :

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>

struct caractere
{
unsigned int iteration[100000];
unsigned int place[100000];
unsigned int nombre;
};

caractere lettre[256];

void init(void)
{
for (int i=0;i<256;i++) {lettre[i].nombre=0;
								for (unsigned int j=0;j<100000;j++) {lettre[i].iteration[j]=0;
                        									lettre[i].place[j]=0;
                                                   }
                        }
}

void Lecture_Fichier(const char *car)
{
FILE *stream;
stream=fopen(car,"rb");

unsigned int i=1;
while (!feof(stream))
	{
   unsigned int c;
   unsigned int test;
   if ((c=fgetc(stream))==EOF) break;
   else {
        test=lettre[c].nombre;
        //cout<<test<<endl;
        //system("pause");
        lettre[c].place[test]=i;
        if (lettre[c].place[test]!=0)
        			{
               lettre[c].nombre++;
               lettre[c].iteration[test]=lettre[c].nombre;
               }

        else {lettre[c].nombre++;}
        i++;
        }

   }
   fclose(stream);
}

void Afficher_Fichier(void)
{
for (int i=0;i<256;i++) {
								for (unsigned int j=0;j<100000;j++) {
                        if (lettre[i].place[j]!=0)
                        	{
                        cout<<"caractere = "<<i<<"  ,  ";
                        cout<<"iteration "<<lettre[i].iteration[j]<<"  ";
                        cout<<"place "<<lettre[i].place[j];
                        cout<<endl;
                        	}							}
                        }
}

void Ecrire_Fichier(const char *cara)
{
FILE *out;
out=fopen(cara,"wb");
for (int i=0;i<256;i++) {
								for (unsigned int j=0;j<100000;j++) {
                        if (lettre[i].place[j]!=0)
                              {
                        fwrite(&i,4,1,out);
                        //cout<<"i vaut : "<<i<<"et sa taille : "<<sizeof(i)<<endl;
                        //fprintf(out," ");
                        fwrite(&(lettre[i].iteration[j]),4,1,out);
                        //cout<<"iteration vaut : "<<lettre[i].iteration[j]<<"et sa taille : "<<sizeof(lettre[i].iteration[j])<<endl;
                        //fprintf(out," ");
                        fwrite(&(lettre[i].place[j]),4,1,out);
                        //cout<<"place vaut : "<<lettre[i].place[j]<<"et sa taille : "<<sizeof(lettre[i].place[j])<<endl;
                        //fprintf(out,"\n");
                        //system("pause");
                        		}
                        								}
                        }
fclose(out);
}

void Decode_Fichier(const char *cara1, const char *cara2)
{
FILE *in,*out;
in=fopen(cara1,"rb");
out=fopen(cara2,"wb");

unsigned int c;
unsigned int temp2[3];
unsigned int *temp=temp2;
unsigned int value=0,it_max=0;
while (!feof(in))
		{
      fread(temp,4,3,in);
      //for (int i=0;i<3;i++) {cout<<"temp["<<(i)<<"] vaut : "<<*(temp+i)<<endl;
      if (*(temp+2)>value) value=*(temp+2);  //}
      if (*(temp+1)>it_max) it_max=*(temp+1);
      //system("pause");
      }
cout<<"Iteration Max : "<<it_max<<" fois"<<endl;

rewind(in);

while (!feof(in))
		{
      fread(temp,4,3,in);
      fseek(out,(*(temp+2)-1),0);
      fputc(*temp,out);
      //system("pause");
      }

//for(int j=0;j<3;j++) {fputc(temp[j],out);
fclose(in);
fclose(out);
}

int main(void)
{
init();

Lecture_Fichier("test.txt");
//Afficher_Fichier();
Ecrire_Fichier("txtcode.txt");
Decode_Fichier("txtcode.txt","decode.txt");

cout<<"Votre fichier est correctement crypte...\n";
system("pause");
return 0;
}

Conclusion :


Si des âmes sympas pouvaient me donner quelques conseils, ça serait cool de leurs part. Merci d'avance et bonne prog.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
jargha Messages postés 2 Date d'inscription dimanche 2 novembre 2003 Statut Membre Dernière intervention 19 novembre 2005
18 oct. 2005 à 11:20
le plus gros defaut de ton code , c'est qu'en possedant le source on peut decrypter le fichier donc aucune securité !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
11 déc. 2003 à 16:25
compression LZW :
http://membres.lycos.fr/frdupoux/compress/index.htm

J'ai également une source en gestation.
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
9 déc. 2003 à 12:58
Faut bien recommencer un jour ;) Merci quand même pour le site ça va m'être très utile...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
9 déc. 2003 à 12:54
arf, oui c'est exact, sorry
ça faisait un bail toi ;-)
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
9 déc. 2003 à 12:29
Pour les formats :
www.wotsit.org et pas .com (heureusement que je suis là Kirua :D)
Afficher les 17 commentaires

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.