Bonjour,
Un jour, je m'ennuyais en cours de uC, comme très souvent en fait. Et j'ai pensé à un algorithme de cryptage, je suis loin de prétendre qu'il est super puissant ou autre mais voilà, je partage pour ceux que cela pourrait intéresser.
Voici un exemple de cryptage de la chaine :
"Bonjour, !
Voici une source qui présente un algorithme de cryptage.
Bien le bonsoir !"
Le cryptage donne :
0709141606100409040008070919010517091217160409010309121214090413100104181713081306010504010016070908171005131315030109090917070210131102131114030512111918010007011511161612050702100302111310151515021601010519141103161812011616150417080614101614010402140011031011150607160319070312001318111706121500191807160503071716030817081911080511010315071907060211170719121702021709141700090312161919060200021213190119050514100902001712190307160006040102150202121815131415110505151315121214091217121206010418051402140602190719071015121217090610170902140601140904000214171312120601041806100400021410010601170902140413041806071713040014090813040002140601140902140709090109191212041817090813010503090400021404090400021406100418090804130813070909190400190502141907190713151709040014090214090104000214141612121409171312121709041802140602
Il y a deux programmes. Un pour crypter l'autre pour décrypter. J'aurais pu les mettre dans un même programme mais bon, il aurait fallu faire un menu et ce n'était pas le but. Libre à ceux qui souhaitent reprendre la source de la modifier à leur sauce.
Toujours est-il qu'il y a donc deux fonctions fcrypter et f decryptage dont les prototypes sont les suivants :
- void fcrypter ( char *entree, char *sortie );
+ entree correspond au chemin du fichier contenant le texte à crypter
+ sortir correspond au chemin du fichier contenant le resultat du cryptage
- void fdecryptage ( char *entree, char *sortie );
+ entree correspond au chemin du fichier contenant le resultat du cryptage
+ sortir correspond au chemin du fichier contenant le resultat du décryptage
Quoiqu'il en soit voici dans les grandes lignes la méthode de cryptage.
[1] On crée un tableau de caractères contenant les caractères qui seront autorisés au cryptage.
[2] On crée une matrice à 2 dimensions initialisée avec un caractère non autorisé ex : '¤'
[3] On appelle une fonction qui va générer aléatoirement des coordonnées pour chaque caractère
autorisé.
On vérifie pour valider le placement du caractère dans la matrice que la case n'est pas déjà
utilisé.
[4] On sauvegarde dans une structure les coordonnées dans la matrice pour chaque caractère.
[5] On va pouvoir généré le cryptage en sachant que le code crypté = trame + texte.
La trame correspond aux coordonnées de chaque caractère dans la matrice rangé dans l'ordre du
tableau des caractères autorisés afin de savoir comment la reconstruire pour le décryptage.
[6] Finalement, on appelle une fonction Crypter qui va chercher dans la matrice les coordonnées de
chaque caractères du texte à crypter.
[7] A l'occasion on en profite pour sauvegarder le résultat i.e la trame + texte.
Pour le décryptage et bien on fait l'inverse. J'ai commenté le code pour que ce soit compréhensible, enfin je l'espère.
Etant donné que j'ai modulé le code, j'ai quelque .c. Pour une meilleur lecture, j'ai zippé la source. Je mets le header de chaque opération i.e : cryptage/décryptage.
Source / Exemple :
/* CRYPTAGE */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M_SIZE 20
typedef struct
{
char c;
int x;
int y;
} BDD;
void SauvegarderCryptage( char *CheminFichier, int *s1 , int taille_s1, int *s2 , int taille_s2 );
void Initialiser_Matrice( char **Matrice , int Ligne , int Colonne , char c );
void Desallouer_Matrice ( char **Matrice , int Colonne );
void MemoriserFichier ( char *CheminFichier, char *Chaine );
void Allouer_Matrice ( char ***Matrice , int Ligne , int Colonne );
void Generer_Matrice ( BDD *bdd , char *T , char **M , int *EnTete, int i , int *p );
void fcrypter ( char *entree , char *sortie );
void Crypter ( BDD *bdd , char *T , char *s , int *d , int taille_d );
int LongueurFichier ( char *CheminFichier );
int DecouperEntier ( int x , int *s , int *i );
/* DECRYPTAGE */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M_SIZE 20
typedef struct
{
char c;
int x;
int y;
} BDD;
void SauvegarderDecryptage( char *CheminFichier, char *s , int taille_s );
void MemoriserFichier ( char *CheminFichier, char *Chaine );
int LongueurFichier ( char *CheminFichier );
void ConstruireBDD ( BDD *bdd , char *T , int *t , int taille_t );
void fdecryptage ( char *entree , char *sortie );
void CharToInt ( char *s , int *d , int taille_s );
void Decrypter ( BDD *bdd , char *T , char *CodeIsDecrypted, int *texte , int taille_Texte );
void Decouper ( int *t , int *s1 , int *s2 , int taille_s1, int taille_s2 );
Conclusion :
Dans tous les cas, il y a sûrement des imperfections dans mon code, donc je vous laisse me critiquer à votre aise et c'est bien là le but en plus de partager la source.
Merci de votre lecture et bonne continuation.
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.