begin process at 2012 05 27 19:07:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > ROUTINE DE CRYPTAGE BASIQUE

ROUTINE DE CRYPTAGE BASIQUE


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité & Cryptage Niveau :Débutant Date de création :15/05/2003 Date de mise à jour :15/05/2003 18:40:22 Vu / téléchargé :2 470 / 71

Auteur : Wett

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Oula en ce moment moi je pars à la recherche des anciennes sources perdues dans mon disque ;) bref c une routine de cryptage de fichiers assez simple, elle crypte par bloc dont la taille est celle de la clé au carré :p et pis ya plein de calculs sur la clé, bref c le bonheur ^^ je doute fort que ca serve jamais à quelqu'un, mais sait-on jamais ^^ je peux plus trop faire de commentaire, tout simplement parce que je ne me rappelle meme plus comment ma source fonctionne!!! :p Ah si je crois, un detail, je me suis rendu compte qu'il etait eventuellement possible que 2 clés normales (si vous trouvez un exemple dites le, j'ai jamais eu le courage de chercher lol) donnent la meme signature (celle que je met dans le fichier pour tester la validité de la clé au moment du decryptage) :/ enfin c un detail :ppp Au pire le fichier decrypté est invalide ^^

Source

  • #include <stdio.h>
  • #include <string.h>
  • #include <io.h>
  • #include <fstream.h>
  • #include <FCNTL.H>
  • #define HEADER 4
  • bool CopyMatrix(unsigned __int8* matdst, unsigned __int8* matsrc, unsigned int startdst, unsigned int startsrc, unsigned int lenght);
  • inline int im(int i, int j, int max) { return i*max + j; }
  • /////////////////////////////////////////////////////////////////////////////////////////
  • // CRYPTAGE:
  • /////////////////////////////////////////////////////////////////////////////////////////
  • bool CopyMatrix(unsigned __int8* matdst, unsigned __int8* matsrc, unsigned int startdst, unsigned int startsrc, unsigned int lenght) // Copie deux matrices de __in8!
  • {
  • if (matdst == NULL || matdst == NULL)
  • return false;
  • for (unsigned int i=0;i<lenght;i++)
  • {
  • matdst[startdst+i] = matsrc[startsrc+i];
  • }
  • return true;
  • }
  • unsigned __int8* Crypt(unsigned __int8* File, char* Key, unsigned long* sizefile, int* Progr)
  • {
  • // Variables:
  • // boucles:
  • unsigned int i, j, k;
  • // Tailles des matrices :
  • unsigned long filesize = *sizefile; //_filelength (fileno);
  • *sizefile = filesize+HEADER;
  • unsigned long keysize = strlen(Key);
  • unsigned long keytsize = keysize*keysize;
  • unsigned long nbpacks = 0;
  • unsigned long rest = 0;
  • unsigned long keytest = 0;
  • // Matrices:
  • unsigned __int8* data = new unsigned __int8[filesize+HEADER];
  • unsigned __int8* keyt = new unsigned __int8[keytsize];
  • unsigned __int8* keytemp = new unsigned __int8[keysize];
  • unsigned int* indexpacks = NULL;
  • // Met le fichier en mémoire
  • for(i=0;i<filesize;i++)
  • data[i] = File[i];
  • delete[] File;
  • // Bon, maintenant on passe aux choses sérieuses!
  • // Init de la table de crypt:
  • for(i=0;i<keysize;i++)
  • keytemp[i] = __int8(Key[i]);
  • for(i=0;i<keysize;i++)
  • for(j=0;j<keysize;j++)
  • keyt[im(i,j,keysize)] = keytemp[i] + keytemp[j];
  • // Clé de test:
  • for(i=0;i<keysize;i++)
  • keytest += keytemp[i] * keytemp[keysize-i-1];
  • delete [] keytemp; // Bye!
  • nbpacks = int((filesize)/keytsize); // Nb de pack de n octets
  • rest = filesize - keytsize*nbpacks; // Nb d'octets restants
  • i=0;j=0;
  • for(;i<nbpacks;i++)
  • for (j=0;j<keytsize;j++)
  • {
  • data[im(i,j,keytsize)] = data[im(i,j,keytsize)] ^ keyt[j]; // Cryptage XOR
  • *Progr = im(i,j,keytsize); // Progression
  • }
  • i--;
  • for(k=im(i,j,keytsize);k<filesize;k++)
  • {
  • data[k] = data[k] ^ keyt[k - im(i,j,keytsize)];
  • *Progr = k; // Progression
  • }
  • // Inscription de la clé de test:
  • data[k] = unsigned __int8((keytest) & 0xFF);
  • data[k+1] = unsigned __int8((keytest >> 8) & 0xFF);
  • data[k+2] = unsigned __int8((keytest >> 16) & 0xFF);
  • data[k+3] = unsigned __int8((keytest >> 24) & 0xFF);
  • delete [] keyt;
  • return data;
  • }
  • /////////////////////////////////////////////////////////////////////////////////////////
  • /////////////////////////////////////////////////////////////////////////////////////////
  • // DECRYPTAGE:
  • /////////////////////////////////////////////////////////////////////////////////////////
  • /////////////////////////////////////////////////////////////////////////////////////////
  • unsigned __int8* Decrypt(unsigned __int8* File, char* Key, unsigned long* sizefile, int* Progr)
  • {
  • // Variables:
  • // boucles:
  • unsigned int i, j, k;
  • // Tailles des matrices :
  • unsigned long filesize = *sizefile;
  • *sizefile = filesize-HEADER;
  • unsigned long keysize = strlen(Key);
  • unsigned long keytsize = keysize*keysize;
  • unsigned long nbpacks = 0;
  • unsigned long rest = 0;
  • unsigned long keytest = 0;
  • // Matrices:
  • unsigned __int8* data = new unsigned __int8[filesize];
  • unsigned __int8* keyt = new unsigned __int8[keytsize];
  • unsigned __int8* keytemp = new unsigned __int8[keysize];
  • unsigned int* indexpacks = NULL;
  • // Met le fichier en mémoire
  • for(i=0;i<filesize;i++)
  • data[i] = File[i];
  • delete[] File;
  • // Bon, maintenant on passe aux choses sérieuses!
  • // Init de la table de crypt:
  • for(i=0;i<keysize;i++)
  • keytemp[i] = __int8(Key[i]);
  • for(i=0;i<keysize;i++)
  • for(j=0;j<keysize;j++)
  • keyt[im(i,j,keysize)] = keytemp[i] + keytemp[j];
  • // Clé de test:
  • for(i=0;i<keysize;i++)
  • keytest += keytemp[i] * keytemp[keysize-i-1];
  • delete [] keytemp; // Bye!
  • // Comparaison des 2 clés de test:
  • if ((data[filesize-HEADER] != ((keytest) & 0xFF)) ||
  • (data[filesize-HEADER+1] != ((keytest >> 8) & 0xFF)) ||
  • (data[filesize-HEADER+2] != ((keytest >> 16) & 0xFF)) ||
  • (data[filesize-HEADER+3] != ((keytest >> 24) & 0xFF)))
  • return NULL;
  • nbpacks = int((filesize-HEADER)/keytsize); // Nb de pack de n octets
  • rest = filesize - HEADER - keytsize*nbpacks; // Nb d'octets restants
  • i=0;j=0;
  • for(;i<nbpacks;i++)
  • for (j=0;j<keytsize;j++)
  • {
  • data[im(i,j,keytsize)] = data[im(i,j,keytsize)] ^ keyt[j]; // Cryptage XOR
  • *Progr = im(i,j,keytsize); // Progression
  • }
  • i--;
  • for(k=im(i,j,keytsize);k<filesize-HEADER;k++)
  • {
  • data[k] = data[k] ^ keyt[k - im(i,j,keytsize)];
  • *Progr = k; // Progression
  • }
  • delete [] keyt;
  • return data;
  • }
#include <stdio.h>
#include <string.h>
#include <io.h>
#include <fstream.h>
#include <FCNTL.H>

#define HEADER 4

bool CopyMatrix(unsigned __int8* matdst, unsigned __int8* matsrc, unsigned int  startdst, unsigned int startsrc, unsigned int lenght);

inline int im(int i, int j, int max) { return i*max + j; }

/////////////////////////////////////////////////////////////////////////////////////////
// CRYPTAGE:
/////////////////////////////////////////////////////////////////////////////////////////
bool CopyMatrix(unsigned __int8* matdst, unsigned __int8* matsrc, unsigned int  startdst, unsigned int startsrc, unsigned int lenght) // Copie deux matrices de __in8!
{
	if (matdst == NULL || matdst == NULL)
		return false;

	for (unsigned int i=0;i<lenght;i++)
	{
		matdst[startdst+i] = matsrc[startsrc+i];
	}

	return true;
}

unsigned __int8* Crypt(unsigned __int8* File, char* Key, unsigned long* sizefile, int* Progr)
{
	// Variables:

	// boucles:
	unsigned int i, j, k;

	// Tailles des matrices :
	unsigned long filesize  = *sizefile; //_filelength (fileno);
	*sizefile = filesize+HEADER;
	unsigned long keysize   = strlen(Key);
	unsigned long keytsize  = keysize*keysize;
	unsigned long nbpacks   = 0;
	unsigned long rest      = 0;
	unsigned long keytest   = 0;

	// Matrices:
	unsigned __int8* data	 = new unsigned __int8[filesize+HEADER];
	unsigned __int8* keyt	 = new unsigned __int8[keytsize];
	unsigned __int8* keytemp = new unsigned __int8[keysize];
	unsigned int* indexpacks = NULL;

	// Met le fichier en mémoire
	for(i=0;i<filesize;i++)
		data[i] = File[i];

	delete[] File;
	// Bon, maintenant on passe aux choses sérieuses!

	// Init de la table de crypt:
	for(i=0;i<keysize;i++)
		keytemp[i] = __int8(Key[i]);

	for(i=0;i<keysize;i++)
		for(j=0;j<keysize;j++)
			keyt[im(i,j,keysize)] = keytemp[i] + keytemp[j];

	// Clé de test:
	for(i=0;i<keysize;i++)
		keytest += keytemp[i] * keytemp[keysize-i-1];

	delete [] keytemp; // Bye!

	nbpacks = int((filesize)/keytsize);		// Nb de pack de n octets
	rest = filesize - keytsize*nbpacks;		// Nb d'octets restants

	i=0;j=0;
	for(;i<nbpacks;i++)
		for (j=0;j<keytsize;j++)
		{
			data[im(i,j,keytsize)] = data[im(i,j,keytsize)] ^ keyt[j];		// Cryptage XOR

			*Progr = im(i,j,keytsize);							// Progression
		}

	i--;
	for(k=im(i,j,keytsize);k<filesize;k++)
	{
		data[k] = data[k] ^ keyt[k - im(i,j,keytsize)];
		*Progr = k;											// Progression
	}

	// Inscription de la clé de test:
	data[k] = unsigned __int8((keytest) & 0xFF);
	data[k+1] = unsigned __int8((keytest >> 8) & 0xFF);
	data[k+2] = unsigned __int8((keytest >> 16) & 0xFF);
	data[k+3] = unsigned __int8((keytest >> 24) & 0xFF);
	
	delete [] keyt;

	return data;
}



/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
// DECRYPTAGE:
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////

unsigned __int8* Decrypt(unsigned __int8* File, char* Key, unsigned long* sizefile, int* Progr)
{
	// Variables:

	// boucles:
	unsigned int i, j, k;

	// Tailles des matrices :
	unsigned long filesize  = *sizefile;
	*sizefile = filesize-HEADER;
	unsigned long keysize   = strlen(Key);
	unsigned long keytsize  = keysize*keysize;
	unsigned long nbpacks   = 0;
	unsigned long rest      = 0;
	unsigned long keytest   = 0;

	// Matrices:
	unsigned __int8* data	 = new unsigned __int8[filesize];
	unsigned __int8* keyt	 = new unsigned __int8[keytsize];
	unsigned __int8* keytemp = new unsigned __int8[keysize];
	unsigned int* indexpacks = NULL;

	// Met le fichier en mémoire 

	for(i=0;i<filesize;i++)
		data[i] = File[i];

	delete[] File;

	// Bon, maintenant on passe aux choses sérieuses!

	// Init de la table de crypt:
	for(i=0;i<keysize;i++)
		keytemp[i] = __int8(Key[i]);

	for(i=0;i<keysize;i++)
		for(j=0;j<keysize;j++)
			keyt[im(i,j,keysize)] = keytemp[i] + keytemp[j];

	// Clé de test:
	for(i=0;i<keysize;i++)
		keytest += keytemp[i] * keytemp[keysize-i-1];

	delete [] keytemp; // Bye!

	// Comparaison des 2 clés de test:
	if ((data[filesize-HEADER]   != ((keytest)       & 0xFF)) ||
		(data[filesize-HEADER+1] != ((keytest >> 8)  & 0xFF)) ||
		(data[filesize-HEADER+2] != ((keytest >> 16) & 0xFF)) ||
		(data[filesize-HEADER+3] != ((keytest >> 24) & 0xFF)))
		return NULL;

	nbpacks = int((filesize-HEADER)/keytsize);		// Nb de pack de n octets
	rest = filesize - HEADER - keytsize*nbpacks;		// Nb d'octets restants

	i=0;j=0;
	for(;i<nbpacks;i++)
		for (j=0;j<keytsize;j++)
		{
			data[im(i,j,keytsize)] = data[im(i,j,keytsize)] ^ keyt[j];		// Cryptage XOR
			*Progr = im(i,j,keytsize);							// Progression
		}

	i--;
	for(k=im(i,j,keytsize);k<filesize-HEADER;k++)
	{
		data[k] = data[k] ^ keyt[k - im(i,j,keytsize)];
		*Progr = k;											// Progression
	}


	delete [] keyt;

	return data;

}

 Conclusion

Derniere precision, sur le zip ya un petit exemple d'utilisation (de test en fait :p)
Voila, tjs pareil si ca vous interresse ou si vous appreciez le code (on peut réver ;) laissez un petit post ;)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip EMPACTEUR/DESEMPACTEUR DE FICHIERS
Source avec Zip PETIT EXEMPLE DE RPG EN 2D AVEC DIRECTX

 Sources de la même categorie

PROJET DE CRYPTOGRAPHIE: RSA À JEU REDUIT D'INSTRUCTION par samatarahmed
Source avec Zip Source avec une capture CRYPTOSYSTÈME ELGAMAL LIBRAIRIE GMP par louelh95
Source avec Zip Source .NET (Dotnet) NOUVEL ALGORITHME D'ENCRYPTION-DÉSENCRYPTION DYNAMIQUE (INFA... par vletktol
Source avec Zip A2DCRYPT - CRYPTAGE 2048 BITS par darkor
Source avec Zip Source avec une capture CRYPTEUR-DÉCRYPTEUR-IP par antho974

Commentaires et avis

Commentaire de Kirua le 17/05/2003 12:44:19

mdr au pire pas moyen de décrypter, en effet tu peux pas faire pire :)

Commentaire de Wett le 17/05/2003 22:17:27

heu, c'est un commentaire sur ce que j'ai dit ou tu me signale que mon code marche pas là? Parce que si c un commentaire, sache qu'on pourra decrypter le fichier avec la clé valide comme avec celle qui se substitue à la premiere, simplement dans le 2nd cas on obtient un fichier invalide, mais tant mieux vu que la clé est fausse ;)

Commentaire de Kirua le 19/05/2003 21:23:46

ah ok :) non c t bien un commentaire par rapport au tien ;)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales