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

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

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.